1.数据库的分类
主要分为:关系型数据库、非关系型数据库和特定用途数据库
分类 | 世界流行 | 国产 |
Relational DBMS | Oracle ,MySQL ,Microsoft SQL Server ,PostgreSQL,ClickHouse,StarRocks等等100多种 | oceanbase,PolarDB, Tidb等 |
Key-value stores | Redis,memcached,etcd 等等60多种 | Tendis等 |
Document stores | MongoDB,Databricks等50多种 | SequoiaDB等 |
Time Series DBMS | Influxdb,promoetheus等40多种 | TDengine等 |
Graph DBMS | Neo4j等40多种 | TuGraph等 |
Search engines | Elasticsearch,Solr等20多种 | Easysearch等 |
Wide Column Stores | Cassandra,Hbase等10多种 | Hyperbase等 |
Vector DBMS | Milvus、Elasticsearch等10多种 | Milvus等 |
分类介绍和对应使用场景
1. Relational DBMS(关系型数据库管理系统)
概述
• 数据结构:以表格 (Table) 的形式存储数据。
• 数据模型:基于关系模型,通过主键和外键来建立表之间的关联。
• 查询语言:使用结构化查询语言 (SQL) 进行数据查询和操作。
• 事务管理:遵循 ACID 特性(原子性、一致性、隔离性、持久性)。
特点
1. 数据一致性强:通过 ACID 事务保证数据的可靠性和一致性。
2. 结构化数据:数据存储格式固定,每个表有明确的模式(Schema)。
3. 复杂查询支持:支持多表连接、聚合、子查询等复杂 SQL 操作。
4. 严格的数据完整性约束:如主键、外键、唯一性等约束。
优点和缺点
关系型数据库优点 | 单机关系型数据库缺点 |
|---|---|
适合处理高度结构化、需要复杂事务和数据一致性的场景。 | 对于海量数据和高并发场景,水平扩展困难。 |
成熟的技术栈和生态系统。 | 动态变化的数据结构支持较差。 |
数据查询灵活且功能强大。 | 性能可能在高频写入时出现瓶颈。 |
常见关系型数据库:
单机:oracle,mysql,postgresql
分布式:CockroachDB,tidb,oceanbase
单机关系型数据库:
特性/指标 | MySQL | PostgreSQL | Oracle |
|---|---|---|---|
开源/商业 | 开源(社区版)+ 商业版 | 完全开源 | 商业数据库 |
SQL 标准支持 | 支持基本 SQL 标准,部分扩展 | 支持更广泛的 SQL 标准和高级功能 | 高度兼容 SQL 标准,提供强大扩展 |
事务支持 | 支持 ACID 事务(通过 InnoDB 引擎) | 完全支持 ACID 事务 | 完美支持 ACID 事务,适合高安全需求 |
总体性能 | 读性能优异,写性能较好 | 读写性能平衡,适合复杂查询 | 最强大的优化器,适合高并发、大数据处理,性能最好 |
适合数据量范围 | 几十 GB 到数TB 级别 | 几十 GB 到数TB 级别 | 几十 GB 到 百T级别 |
数据类型支持 | 基本数据类型,JSON 支持有限 | 支持丰富的数据类型,如 JSON、数组、XML | 丰富的数据类型,包括 LOB、XML、JSON |
JSON 支持 | 支持 JSON,但功能有限 | 强大的 JSON 支持(如 JSONB 存储) | 支持 JSON,侧重 XML 支持 |
安全性 | 基本安全功能,适合中小型应用 | 强大的安全特性,适合企业级应用 | 高级安全功能,适合金融和高安全场景 |
地理空间数据 | 支持基本地理空间数据(MySQL 8.0) | 强大的地理空间数据支持(PostGIS 插件) | 完整的地理空间功能 |
扩展性和高可用架构 | 单机,通常可以通过第三方软件进行水平分片扩展和高可用 | 单机,通常可以通过第三方软件进行水平分片扩展和高可用 | 单机/rac多节点集群模式 |
社区与支持 | 社区活跃,文档丰富 | 开源社区活跃,文档详尽 | 商业支持强大,专业技术支持 |
成本 | 开源免费,商业版收费 | 完全开源免费 | 收费昂贵,适合大型企业级应用 |
适用场景 | 轻量、易用、快速开发,适合 中小型 Web 应用、内容管理系统、电商网站 等对读性能要求高的场景。- 读多写少场景 | 世界流行度较高,中国流行度不如mysql,适合需要 复杂查询、数据分析、GIS 系统 和 企业级应用。 | 适合 大型企业系统、金融系统、高并发、大数据量的场景 |
分布式关系数据库:
CockroachDB,tidb,oceanbase对比
特性 | CockroachDB | TiDB | OceanBase |
|---|---|---|---|
兼容性 | PostgreSQL | MySQL | MySQL, Oracle,Postgresql |
架构设计 | Shared-nothing 架构,所有节点平等且独立,分布式最终形态 | 计算与存储分离,存储节点与计算节点独立扩展。tiflash支持HTAP | 分布式存储和计算,多副本数据自动同步,几乎做到了对等独立。列存模式,支持HTAP |
底层存储引擎 | 底层RocksDB 采用 LSM 树 结构+索引B+树 | 底层RocksDB 采用 LSM 树 结构+索引B+树 | 自研分布式存储引擎,采用 LSM 树 结构+索引B+树 |
高可用性 | 多副本自动故障恢复 | 多副本和跨数据中心高可用 | 跨数据中心高可用,自动故障转移 |
故障恢复 | 节点故障时,副本自动选主,保证高可用性。 | 节点故障时自动切换到可用节点。 | 支持节点故障自动恢复,快速重新同步。 |
水平扩展性 | 易于水平扩展,线性扩展 | 计算和存储分离,易于扩展 | 高效的水平扩展,适合大规模数据 |
适用场景 | 兼容postgresql,不适用olap,全球分布式事务 | olap,oltp,兼容mysql,高并发下性能可能会有抖动 | 金融级别,兼容oracle,mysql,pg,高可用和极低延迟有强需求 |
性能问题 | 单节点大概只有oracle的一半性能,三节点部署后约1-1.5倍性能 |
2.非关系型数据库介绍
Key-Value Stores(键值存储)
概述
数据以键-值对存储,类似于字典,通过键快速查找值。
特点
1. 无模式(Schema-Free):
• 数据存储没有固定的结构,可以根据需要动态存储不同类型的值。
2. 快速读写:
• 通过键直接访问值,查找时间复杂度通常是 O(1),非常高效。
优点和缺点
优点 | 缺点 |
高性能:由于通过键直接查找,读写速度非常快,适合低延迟需求场景 | 不支持复杂查询:无法执行 SQL 查询或关联查询,不适合复杂的数据分析。 |
数据存储灵活:支持存储任意类型的值(字符串、JSON、二进制等)。 | 缺少事务支持:一些 Key-Value Stores 对事务支持有限,无法保证 ACID 特性 |
简单易用:存取接口简单,开发和维护成本低 | 数据关系难以表示:只支持简单的键值对,无法直接表示数据之间的复杂关系。 |
可用于缓存:由于快速读写,常用于缓存系统,提高应用响应速度。 | 有限的数据类型支持:适合简单数据结构,不适合存储高度结构化的数据。 |
常见数据库介绍:
特性 | etcd | Redis |
|---|---|---|
存储类型 | 分布式 Key-Value 存储 | 内存 Key-Value 存储 |
一致性 | 强一致性,通过 Raft 算法保证 | 最终一致性,支持主从复制(可选强一致性) |
性能 | 读写性能较高,但不如 Redis 快 | 极高的读写性能(内存操作) |
数据结构 | 仅支持简单的键值对(字符串) | 支持多种数据结构(字符串、列表、集合等) |
事务支持 | 支持分布式事务(基于 Raft 共识) | 支持本地事务(MULTI/EXEC),不支持分布式事务 |
应用场景 | 分布式系统协调,配置管理,强一致性需求 | 缓存、会话存储、实时统计、消息队列 |
Document Stores(文档存储)
概述
数据以文档形式存储,文档是半结构化数据,通常采用JSON、BSON、XML等格式,能够存储键值对、数组和嵌套对象,这种结构非常适合处理复杂和动态的数据。文档存储数据库能够快速读取和写入数据,特别适合需要灵活数据模型和高速响应的应用场景。
特点
1. 灵活的文档模式,适合存储非结构化或半结构化数据
• 不需要定义严格的表结构,每个文档可以有不同的字段和数据类型。
• 非常适合可以适应快速变化的业务需求,无需在存储数据前定义固定的模式。
2. 嵌套数据结构与复杂文档存储
• 支持嵌套文档和数组,能轻松表示复杂的层级关系。
• 例如,例如在一个用户文档中存储订单列表或地址信息,减少对多表关联(Join)的需求,提高了查询性能。
3. 高性能读取与写入
• 通过索引和内存缓存机制,提供快速的数据读取和写入操作。
• 适合需要低延迟的数据存取场景。
优缺点
优点 | 缺点 |
灵活性:无需预先定义模式,适合快速变化的应用需求。以 JSON 或 BSON 格式存储,符合现代 Web 开发的习惯。 | 查询复杂性:不适合进行复杂的多表关联查询(Join 操作) |
高效的读写操作:适合需要快速插入、读取和更新数据的场景。 | 一致性问题:在分布式环境下,可能面临数据一致性问题。 |
支持嵌套和复杂数据:可以存储和操作嵌套对象,减少多表关联的复杂性。 | 事务支持有限:对于严格 ACID 事务的支持通常不如关系型数据库。 |
常用文档存储数据库
1. MongoDB:
• 特点:以 BSON 格式存储文档,支持丰富的查询、索引和聚合功能。提供高可用和分布式部署支持。
应用场景
• 应用场景:内容管理系统、实时分析、日志管理、物联网数据存储等。
Time Series DBMS(时序数据库)
概述
时序数据库是一种专门用于存储和处理按时间戳排序的数据的数据库。这类数据库在需要高频写入和时间范围查询的场景中表现出色,如监控、物联网、金融市场等
特点
1. 时间戳驱动:所有数据点都附带时间戳,按时间顺序存储和查询。
2. 高写入性能:支持高频数据写入,适合持续数据采集场景。
3. 高效查询:针对时间范围优化的查询引擎,快速检索特定时间段的数据。
4. 数据压缩:高效的数据压缩算法减少存储需求。
5. 自动数据过期管理:支持数据保留策略,自动删除过期数据。
6. 聚合与降采样:支持时间窗口聚合和数据降采样,便于长时间跨度数据分析。
7. 分布式和高可用性:许多时序数据库支持分布式架构,保证高可用性和扩展性。
优缺点
优点 | 缺点 |
高写入速度:能快速处理大量实时数据点 | 数据模型单一:主要适合时间戳数据,不适合复杂事务型数据。 |
时间序列查询优化:对时间窗口查询进行了专门优化。 | 查询灵活性受限:查询语言相对专门化,可能无法满足通用需求 |
内置分析功能:支持聚合、统计、降采样等时序分析操作。 | |
数据压缩:高效存储大量历史数据,降低存储成本。 | |
自动数据管理:通过数据保留和删除策略自动管理数据生命周期。 |
常用数据库
InfluxDB,TimescaleDB,Prometheus对比
InfluxDB | TimescaleDB | Prometheus | |
|---|---|---|---|
特点 | 开源,专门用于时序数据,支持 InfluxQL 查询语言和数据标签化。 | 基于 PostgreSQL,支持 SQL 查询和关系型数据库特性。 | 开源监控系统,内置时序数据库和 PromQL 查询语言。 |
优势 | 高性能写入、丰富的时序函数、数据压缩。 | 兼容 SQL,适合混合时序和关系型数据的应用。 | 强大的告警和监控功能,易于与 Kubernetes 集成。 |
适用场景 | 物联网监控、系统性能监控。 | 金融市场分析、工业物联网。 | 系统监控、云原生应用监控。 |
应用场景
1. 物联网(IoT):
• 示例:智能家居传感器、工业设备监控、环境监测。
• 特点:大量传感器产生高频数据,需实时存储和分析。
2. 系统和应用监控:
• 示例:服务器性能监控、应用性能监控(APM)、网络流量监控。
• 特点:需实时监控系统健康,快速响应故障。
3. 金融市场分析:
• 示例:股票价格、交易数据、市场趋势分析。
• 特点:对历史和实时数据的快速分析和查询需求。
4. 能源管理:
• 示例:电力消耗监控、智能电表数据收集。
• 特点:需要长时间存储和趋势分析,支持实时告警。
5. 工业自动化与预测性维护:
• 示例:生产线设备状态监控、设备维护预测。
• 特点:对设备数据进行实时分析,预测故障并减少停机时间。
6. 日志和事件分析:
• 示例:应用日志、用户行为日志。
• 特点:按时间顺序记录和查询,支持趋势分析。
Graph DBMS(图数据库)
概述
是一种专门用来存储和查询节点(Nodes)、边(Edges)和它们之间的关系的数据库。它通过图结构来建模数据,适合需要高度关联性、复杂关系和快速遍历查询的场景
特点
1. 图结构存储:数据以节点(实体)和边(关系)存储,边可以附带权重或属性。
2. 高效的关系遍历:适合处理复杂的多级关系查询,遍历路径效率高。
3. 灵活的模式:无需预定义固定的模式,能够动态添加节点和关系。
4. 强大的查询语言:
• 常见的有 Cypher(用于 Neo4j)、Gremlin(用于 Apache TinkerPop 支持的数据库)。
5. ACID事务支持:许多图数据库支持事务的一致性和完整性,确保数据可靠性。
6. 可视化友好:图形化展示数据和关系,便于分析和理解数据结构。
优缺点
优点 | 缺点 |
处理复杂关系: • 适合高度关联的数据,支持深度关系遍历和分析。 | 存储开销大: • 节点和边的数据存储会带来较大的存储开销。 |
高性能查询: • 在关系复杂的场景下,查询性能优于关系型数据库。 | 不适合简单事务: • 在简单数据模型或高频事务场景下,表现不如关系型数据库。 |
模式灵活: • 不需要固定的表结构,易于扩展和修改数据模型。 | 学习曲线陡峭: • 图数据库的查询语言和数据模型需要一定学习成本。 |
图算法支持: • 支持图算法如最短路径、社区发现、中心性分析等,适合社交网络分析、推荐系统等应用。 | 生态相对较小: • 相比于关系型数据库,工具和开发社区规模较小。 |
常用数据库
Neo4j:
• 特点:最流行的开源图数据库,使用 Cypher 查询语言。
• 优势:强大的事务支持、可视化工具丰富、社区活跃。
• 适用场景:社交网络、推荐引擎、网络安全分析。
应用场景
1. 社交网络分析:
• 示例:用户关系网络、好友推荐。
• 特点:需要处理大量节点之间的复杂关系和路径。
2. 推荐引擎:
• 示例:电商推荐、内容推荐。
• 特点:基于用户行为和物品关系进行实时推荐。
3. 网络安全分析:
• 示例:入侵检测、异常流量分析。
• 特点:快速识别网络中的异常模式和连接。
4. 知识图谱:
• 示例:搜索引擎中的实体关系、医学知识图谱。
• 特点:需要表达实体之间的丰富关系。
5. 供应链管理:
• 示例:跟踪物品从生产到销售的路径。
• 特点:需要高效管理和查询多级供应链关系。
6. 身份和访问管理(IAM):
• 示例:权限控制、角色分配。
• 特点:管理用户与资源之间的复杂关系。
7. 金融风险分析:
• 示例:反欺诈检测、交易网络分析。
• 特点:识别复杂交易链条中的异常模式。
Search Engines(搜索引擎数据库)
概述
搜索引擎数据库(Search Engine Databases)是一类专门用于高效检索和搜索大量非结构化或半结构化文本数据的数据库系统。这类数据库侧重于全文搜索和快速索引,能够在海量数据中快速定位所需的信息,广泛应用于日志分析、网站搜索和大数据搜索场景。
特点
1. 倒排索引(Inverted Index):
• 核心技术,用于快速定位包含特定关键词的文档。
• 将关键词映射到包含它们的文档列表,提升搜索效率。
2. 全文搜索(Full-text Search):
• 支持对整个文本内容进行搜索,而不仅限于特定字段。
• 提供模糊搜索、匹配度排序、分词等功能。
3. 快速查询响应:
• 能够在海量数据中实现毫秒级的搜索响应。
• 适合高并发的查询请求。
4. 可扩展性:
• 支持水平扩展,适合分布式部署以处理大规模数据。
5. 近实时搜索:
• 数据更新后可以快速被索引,从而支持近实时搜索。
6. 高级搜索功能:
• 支持布尔查询、通配符搜索、范围搜索、相似性搜索等。
7. 数据聚合与分析:
• 提供聚合功能,用于统计、汇总和分析搜索结果。
优缺点
优点 | 缺点 |
搜索速度快: • 倒排索引技术使得在海量数据中搜索特定关键词非常高效。 | 一致性较弱: • 在分布式环境下,可能无法保证强一致性,适合最终一致性场景。 |
强大的搜索功能: • 支持复杂的搜索查询,如模糊搜索、排序、分组、过滤等。 | 数据更新开销大: • 实时更新索引的开销较高,不适合频繁更新的场景。 |
适合非结构化数据: • 能够高效处理文本、日志、文档等非结构化数据。 | 复杂查询支持有限: • 不适合复杂的事务性操作和高度结构化的数据关系。 |
分布式架构: • 可水平扩展,适合处理大规模数据和高并发请求。 | |
近实时索引: • 数据变化后能够迅速更新索引,支持实时搜索。 |
常用数据库
1. Elasticsearch:
• 特点:开源分布式搜索引擎,基于 Apache Lucene 构建。
• 优势:强大的全文搜索、实时分析、分布式存储和索引。
• 应用场景:日志分析、网站搜索、商业智能。
2. Apache Solr:
• 特点:基于 Lucene 构建的开源搜索平台,提供丰富的搜索功能。
• 优势:易于配置、支持复杂搜索、聚合分析。
• 应用场景:企业搜索、数据挖掘、内容管理系统。
应用场景
1. 网站内部搜索:
• 示例:电商网站的商品搜索、内容网站的文章搜索。
• 特点:快速定位内容,提高用户体验。
2. 日志分析:
• 示例:通过 Elasticsearch 处理海量服务器日志。
• 特点:实时监控和分析系统日志,发现异常。
3. 企业搜索:
• 示例:大型公司内部文档和数据检索。
• 特点:整合多个数据源,实现高效信息查找。
4. 应用内搜索:
• 示例:手机应用或 SaaS 平台内的数据搜索。
• 特点:提供快速搜索和推荐功能。
5. 大数据分析:
• 示例:通过 Splunk 分析安全事件、业务指标。
• 特点:海量数据的实时分析和可视化。
6. 推荐系统:
• 示例:通过搜索引擎技术实现智能推荐。
• 特点:基于用户搜索行为提供个性化推荐。
Wide Column Stores(宽列存储)
概述
它与传统关系型数据库(按行存储)不同,宽列存储在同一列簇内的各行可以拥有不同的列组合。这种灵活的数据模型和可扩展性使得宽列存储非常适合大规模分布式存储和高性能查询场景。
特点
1. 基于列簇的存储模型:
• 数据按列簇存储,每个列簇包含多个列。
• 每一行的列簇可以动态增加列,灵活适应不同数据需求。
2. 高可扩展性:
• 支持水平扩展,能轻松处理大规模数据。
3. 分布式架构:
• 数据分布在多个节点上,支持高可用和容错性。
4. 可变的数据结构:
• 每行可以有不同的列,适应半结构化或非结构化数据。
5. 高效的批量读写:
• 优化了批量操作,特别适合写入密集型和读操作的场景。
6. 支持稀疏数据:
• 存储稀疏数据时无需存储空白字段,减少存储开销。
优缺点
优点 | 缺点 |
灵活的数据模型: • 可以按需动态增加列,适合多变的数据需求。 | 查询灵活性较差: • 不适合复杂的查询和事务,主要支持简单的查询模式。 |
高可扩展性和高可用性: • 支持分布式部署和集群扩展,能处理 PB 级别数据。 | 缺乏事务支持: • 不适合需要 ACID 特性的应用场景。 |
高效写入性能: • 适合写密集型操作,如日志记录、传感器数据存储。 | 一致性问题: • 分布式架构下,通常采用最终一致性模型,不适合强一致性需求。 |
常用数据库
1. Apache Cassandra:
• 特点:高可用、分布式存储,支持无主架构。
• 应用场景:物联网数据存储、日志存储、大规模用户活动追踪。
2. HBase:
• 特点:基于 Hadoop HDFS 构建,支持大规模数据存储和快速访问。
• 应用场景:实时分析、时序数据存储、数据湖。
应用场景
1. 日志和事件存储:
• 示例:大量应用和服务器日志存储。
• 特点:写密集型场景,快速写入和批量读取。
2. 物联网数据:
• 示例:传感器实时数据采集和存储。
• 特点:高并发写入和时间序列查询。
3. 推荐系统:
• 示例:用户行为和偏好数据存储,用于实时推荐。
• 特点:动态数据模型,适应用户数据变化。
4. 社交媒体数据:
• 示例:用户动态、评论、点赞记录。
• 特点:高可扩展性,处理大规模用户数据。
5. 实时分析和监控:
• 示例:实时分析用户活动或系统性能指标。
• 特点:快速写入和批量读取,适合流式数据处理。
为什么列存储适合分析型数据库:
a. 高效的数据压缩
• 列存储能够大幅度压缩同一列的数据,因为同一列通常是相似的,比如存储的是整数或日期类型的数据。这种压缩使得存储空间大大减少,也能提高 I/O 性能。
• 列存储特别适合静态数据,数据量大但更新频率低的场景。
b. 更快的聚合查询
• 在分析型查询中,通常需要执行大量的聚合操作或者多表关联,如求总和、计算平均数、进行统计等。列存储能够通过扫描每列的数据(而不是整个行数据)来高效地执行这些操作。
c. 适用于大规模数据查询
• 列存储数据库适合处理海量数据集的查询,尤其在需要从大量记录中筛选出一些特定列或字段时,列存储能够快速地提供查询结果。
Vector DBMS(向量数据库)
概述
向量数据库主要用于存储特征向量(feature vectors),这些向量通常是通过深度学习模型或其他特征提取方法生成的,用于表示文本、图像、音频等非结构化数据的特征
特点
1. 高效的向量检索:
• 支持高维向量的快速相似性搜索,如最近邻搜索和余弦相似度、欧几里得距离、点积等度量方式。
2. 索引技术:
• 常用的索引方法包括 HNSW(Hierarchical Navigable Small World)、IVF(Inverted File Index)、PQ(Product Quantization) 和 LSH(Locality Sensitive Hashing)。
3. 支持大规模数据:
• 能够高效处理上亿条向量数据,并维持较低的搜索延迟。
4. 实时数据插入和更新:
• 支持动态添加、删除和更新向量数据,而无需重新构建整个索引。
5. 融合多种数据类型:
• 结合元数据存储和向量数据进行混合搜索。
6. 分布式架构:
• 支持横向扩展,以应对海量数据和高并发查询需求。
优缺点
优点 | 缺点 |
高效相似性搜索: • 适合需要快速进行相似度匹配的场景,如推荐系统、图像识别等。 | 搜索结果近似: • 为提高性能,向量数据库通常使用近似最近邻搜索(ANN),可能导致检索结果非 100% 精确。 |
支持大规模数据: • 能够高效处理数亿甚至数十亿向量数据。 | 应用领域有限: • 主要适用于需要向量相似性搜索的场景,对于传统事务型应用不适用。 |
灵活的索引机制: • 提供多种索引算法以适应不同的查询场景和性能需求。 | |
实时性: • 支持向量数据的实时插入和搜索。 | |
集成 AI 应用: • 适合与机器学习、深度学习模型结合使用,提升检索效果。 |
常用数据库
1. Milvus:
• 开源向量数据库,支持多种索引算法,广泛应用于图像搜索、推荐系统、NLP 等领域。
2.ElasticSearch:
• 通过集成 Dense Vector 功能,支持向量相似性搜索,适合与文本搜索结合使用。
应用场景
1. 推荐系统:
• 通过计算用户和商品之间的向量相似性,实现个性化推荐。
2. 自然语言处理(NLP):
• 在语义搜索中,通过向量化表示文本,实现高效的语义匹配。
3. 图像和视频搜索:
• 存储图像特征向量,通过向量相似性搜索找到相似图像或视频。
4. 异常检测:
• 通过向量之间的差异检测异常模式。
5. 音频识别:
• 存储音频特征向量,实现音频相似性匹配和识别。
6. 生物信息学:
• 用于 DNA、蛋白质结构的向量化存储和相似性搜索。




