关系(SQL)与非关系(NoSQL)型数据库

发布时间 2023-11-23 15:54:53作者: 克峰同学

关系型数据库

  • 行列式表存储
  • 结构化数据需要预定义数据类型
  • 数据量和查询量都不大,如果数据量大要做分表
  • 对数据一致性、完整性约束、事务性、可靠性要求比较高
  • 支持多表 Join 操作
  • 支持多表间的完整性,要删除 A 表的某条数据,可能需要先删除 B 表的某些数据
  • SQL 的增删改查功能强
  • 较为通用,技术比较成熟
  • 大数据量性能不足
  • 高并发性能不足
  • 无法应用于非结构化数据
  • 扩展困难

常用的有:Oracle、MySQL、PostgreSQL、SQLite

非关系型数据库

  • 表结构较灵活,比如列存储,键值对存储,文档存储,图形存储
  • 支持非结构化数据
  • 有的不需要预定义数据类型,有的甚至不需要预定义表
  • 支持大数据量
  • 多数都支持分布式
  • 扩展性好
  • 基本查询能力,高并发能力比较强 (因为采用非结构化、分布式,并牺牲一致性、完整性、事务性等功能)
  • 对数据一致性要求比较低
  • 通常不支持事务性,或是有限支持
  • 通常不支持完整性,复杂业务场景支持较差
  • 通常不支持多表 Join,或是有限支持
  • 非 SQL 查询语言,或类 SQL 查询语言,但功能都比较弱,有的甚至不支持修改删除数据
  • 不是很通用,技术多样,市场变化比较大

常用的有

  • 列式:HBase、Cassandra、ClickHouse
  • 键值:Redis、Memcached
  • 文档:MongoDB
  • 时序:InfluxDB、Prometheus
  • 搜索:Elasticsearch

SQL 和 NoSQL 是一个互补的关系,应用在不同的场景中