基于关系模型(二维表结构),数据以 “表(Table)” 为单位存储,表由 “行(记录)” 和 “列(字段)” 组成,且有严格的固定 Schema(字段类型、长度等需预先定义)。
例如:用户表(id, name, age)、订单表(order_id, user_id, amount),通过 “user_id” 关联两张表。
典型产品:MySQL、PostgreSQL、Oracle、SQL Server。
数据模型灵活,无固定 Schema,根据场景分为多种类型:
文档型(如 MongoDB):以 “文档” 为单位(类似 JSON/BSON),可嵌套结构(如一个文档包含用户基本信息 + 订单列表);
键值型(如 Redis):以 “键 - 值对” 存储(类似字典),适用于简单查询;
列族型(如 Cassandra):按 “列族” 分组存储,适合海量数据的列级查询;
图数据库(如 Neo4j):以 “节点 - 关系” 模型存储,擅长处理复杂关联(如社交网络关系)。
通过外键(Foreign Key) 明确表之间的关系(如一对一、一对多),支持JOIN 操作(通过关联字段合并多表数据)。
例:通过user_id将 “用户表” 和 “订单表” JOIN,查询某个用户的所有订单。
不支持(或不推荐)复杂 JOIN,通常通过两种方式处理关系:
嵌入式存储:将关联数据嵌入主文档(如订单文档中直接包含用户基本信息);
应用层处理:由业务代码分别查询多个数据源,再手动关联。
例:MongoDB 中,订单文档可能直接包含user_name而非user_id,避免跨文档关联。
严格遵循ACID 原则(原子性、一致性、隔离性、持久性),支持强事务(如银行转账需保证 “扣钱” 和 “加钱” 同时成功或失败),适合对数据一致性要求极高的场景。
早期多数不支持事务,更倾向BASE 原则(基本可用、软状态、最终一致性),通过牺牲部分一致性换取高可用性和扩展性。 但近年部分 NoSQL 开始支持有限事务(如 MongoDB 4.0 + 支持多文档事务,Redis 支持单键事务),但复杂事务能力仍弱于 RDBMS。
垂直扩展(升级服务器硬件)为主,水平扩展(分片)难度高(因表关系复杂,分片后 JOIN 成本极大)。
天生支持水平扩展(通过分片将数据分散到多台服务器),因数据模型松散,分片后无需复杂关联,适合海量数据场景(如亿级用户日志存储)。
统一使用SQL(结构化查询语言),语法标准化(如SELECT * FROM table WHERE ...),支持复杂查询(嵌套查询、聚合函数等)。
无统一查询语言,各产品有专属接口: MongoDB 用find()、aggregate()等方法; Redis 用GET、SET等命令; 图数据库用 Cypher(Neo4j)等。
适合数据结构固定、需复杂关系查询、强事务的场景: 金融交易(银行转账、支付系统); 电商订单(需关联用户、商品、库存等多表); 企业 ERP 系统(数据关系复杂且一致性要求高)。
适合数据结构多变、高并发读写、海量数据的场景: 社交数据(用户动态、评论,结构灵活); 日志存储(如服务器日志,高写入、低查询复杂度); 实时推荐系统(需快速读写海量用户行为数据)。
本文作者:haotian
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!