半结构化数据:数据带有结构,但没有严格固定表结构,典型格式 JSON、BSON、XML、YAML、Protobuf,数据字段可动态增减。下面按 NoSQL 文档库、时序、对象存储、消息队列、分析引擎 分类介绍,侧重适用场景、优缺点。
一、文档型数据库(最常用,原生支持 JSON/BSON)
1. MongoDB
存储格式:BSON(二进制 JSON),文档模型,字段灵活可变,支持嵌套、数组。
核心能力:二级索引、聚合查询、事务、分片集群、副本集。
适用:业务系统动态 JSON 数据、用户画像、日志、业务对象,不需要严格固定 schema。
优点:对 JSON 友好,开发简单,生态成熟;
缺点:大数据量分析性能弱于数仓,事务开销大。
2. CouchDB
存储格式:原生 JSON 文档,MVCC 多版本并发控制。
特点:擅长离线同步,适合移动端、边缘设备,内置复制同步。
适用:边缘端、离线多端同步场景。
缺点:聚合查询能力一般,国内使用较少。
3. Elasticsearch / OpenSearch
很多人只当搜索引擎,实际也是半结构化存储
存储:JSON 文档,不需要预先定义 mapping(可动态推断字段)。
能力:全文检索、多维过滤、聚合、分词;支持分片。
适用:日志存储、埋点、搜索业务、JSON 日志检索。
优点:检索、过滤极强;
缺点:不适合高频更新大文档,存储成本高,不适合做核心业务主库。
二、对象存储 + 文件格式(海量半结构化,大数据场景)
数据存文件,schema 可变,配合计算引擎读取,适合海量离线数据。
1. MinIO / S3 兼容对象存储 + JSON/Parquet/ORC
存储:JSON Lines(每行一个 JSON 对象)、Parquet、ORC。
JSON Lines:纯半结构化;Parquet/ORC 是列式半结构化,支持 schema 演进。
适用:埋点日志、业务原始数据湖;Flink/Spark 直接读写。
优点:成本极低,可无限扩展;
缺点:不能做实时随机查询,需要计算引擎。
2. HBase
列族 NoSQL,宽列模型,半结构化 KV。
存储:行 key,列族下列可以动态新增,不需要预定义全部列。
适用:海量稀疏数据,用户行为、时序宽表。
优点:超大规模,高吞吐;
缺点:查询只能按 rowkey,条件查询弱,维护重。
三、时序数据库(半结构化时序数据)
InfluxDB / TDengine
存储:时序行,tag (标签) 动态可变,fields 动态字段。
适用:设备上报 JSON 测点、IoT 传感器数据。
特点:标签维度灵活,自动降采样;时间维度查询极强。
四、消息队列(流式半结构化,临时存储)
Kafka
消息体一般存 JSON/Protobuf,本身不解析内容,只做字节存储。
适合:半结构化数据流中转,配合 Flink 消费落库。
注意:Kafka 是消息中间件,不适合做长期存储。
五、SQL 类支持半结构化(关系库内置 JSON 能力)
传统关系数据库,支持 JSON 字段,适合混合结构化 + 半结构化业务。
1. PostgreSQL(JSONB)
JSONB:二进制 JSON 类型,支持索引、JSON 查询、嵌套过滤。
适用:主库是关系模型,少量字段需要动态 JSON,不适合全部数据都 JSON。
优势:可以和普通 SQL 联合查询,事务强。
2. openGauss JSONB
兼容 PostgreSQL JSONB 能力,国产信创场景。
3. MySQL JSON
原生 JSON 字段,支持简单 JSON 查询;索引能力弱于 PG JSONB。
六、分析型引擎(数据湖仓)
Doris
支持 JSON 类型、Variant 类型(动态半结构化),可以直接导入 JSON 日志,无需预先建表。
Variant:专门为半结构化设计,自动解析 JSON,字段动态,适合埋点、日志分析。
ClickHouse
支持 JSON、Object (JSON) 类型,支持动态解析 JSON,高性能日志分析。
选型快速参考
简单选型建议
业务主存储,大量动态 JSON → MongoDB
关系业务,少量动态字段 → PostgreSQL JSONB
要检索查询 JSON → Elasticsearch
海量日志埋点分析 → Doris / ClickHouse
海量原始数据归档 → 对象存储 JSONLines/Parquet
本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。
原文链接
欢迎访问 小易撩挨踢