前言:随着互联网的高速发展,为了满足不同的应用场景,数据库的种类越来越多容易混淆,所以有必要在此总结一下。数据库根据数据结构可分为关系型数据库和非关系型数据库。非关系型数据库中根据应用场景又可分为键值(Key-Value)数据库、列存储数据库、面向文档数据库、图数据库、向量数据库、时序数据库和搜索引擎数据库等。Nosql = not only sql,意即“不仅仅是sql”,NoSQL数据库泛指非关系型数据库
一、常见开源数据库有哪些?
OceanBase: 是由蚂蚁集团完全自主研发的国产原生分布式数据库,始创于2010年。已连续10年 平稳支撑双11, 创新推出“三地五中心”城市级容灾新标准 ,是一个在TPC-C和TPC-H测试上都刷新了世界纪录的国产原生分布式数据库。 产品采用自研的一体化架构,兼顾分布式架构的扩展性与集中式架构的性能优势,用一套引擎同时支持TP和AP的混合负载, 具有数据强一致、高可用、高性能、在线扩展、高度兼容SQL标准和主流关系数据库、低成本等特点,助力金融、政府、运营商、零售、互联网等多个行业的客户实现核心系统升级
PostgreSQL:是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。POSTGRES的许多领先概念只是在比较迟的时候才出现在商业网站数据库中。PostgreSQL支持大部分的SQL标准并且提供了很多其他现代特性,如复杂查询、外键、触发器、视图、事务完整性、多版本并发控制等。同样,PostgreSQL也可以用许多方法扩展,例如通过增加新的数据类型、函数、操作符、聚集函数、索引方法、过程语言等。另外,因为许可证的灵活,任何人都可以以任何目的免费使用、修改和分发PostgreSQL。
MongoDB:是一个基于分布式文件存储的数据库,由C++语言编写,其目的是为WEB应用提供可扩展的高性能数据存储解决方案,最大的特点在于它支持的查询语言非常强大,局域高性能、易部署、存储数据方便、模式自由等特点。
ClickHouse:是俄罗斯的Yandex于2016年开源的一个用于联机分析(OLAP:Online Analytical Processing)的列式数据库管理系统(DBMS:Database Management System),简称CK , 使用C++ 语言编写, 主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。
Hbase:是一个在 Hadoop Distributed File System (HDFS) 上运行的列式存储非关系数据库管理系统。 HBase采用了Google BigTable的稀疏的,面向列的数据库实现方式的理论,提供了存储稀疏数据集的容错方式,这类数据集在许多大数据用例中十分常见。它非常适合实时数据处理或者对大量数据的随机读取/写入访问。HBase 不支持 SQL 一类的结构化查询语言, HBase 应用程序以 Java™ 编写,更像是一款典型的 Apache MapReduce 应用程序。HBase 非常适合与 Hive 结合使用,后者是用于大数据批处理的查询引擎,以支持容错性大数据应用程序。
Hive:是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive十分适合对数据仓库进行统计分析
StarRocks: 是开源的新一代极速全场景MPP数据库。它采用新一代的弹性MPP架构,可以高效支持大数据量级的多维分析、实时分析、高并发分析等多种数据分析场景。StarRocks 性能出色,它采用了全面向量化技术,比同类产品平均快3-5倍。
Apache Doris :是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于此,Apache Doris 能够较好的满足报表分析、即时查询、统一数仓构建、数据湖联邦查询加速等使用场景,用户可以在此之上构建用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用。
Cassandra:是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存收件箱等简单格式数据,具有模式灵活、多数据中心识别,可扩展性强等特点 。
Couchbase:是一个集群化的、基于文档的数据库系统,它使用一个缓存层来提供非常快的数据访问,将大部分数据都存储在 RAM 中。
Neo4j:是面向网络的数据库。也就是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但它将结构化数据存储在网络上而不是在表中。
二、数据库分类
数据库根据数据结构可分为关系型数据库和非关系型数据库。非关系型数据库中根据应用场景又可分为键值(Key-Value)数据库、列存储数据库、面向文档数据库、图数据库、向量数据库、时序数据库、搜索引擎数据库等。
数据库种类很多,我们平时接触最多的恐怕就是MySQL数据或者Oracle数据库。两者是应用最广泛的关系型数据。下面图1是2023年11月份使用情况排名,从排名也可以看出上述两个数据库分别排第一名和第二名。 ( 排名参考于https://db-engines.com)
图1 数据库排名
如果仔细看图1的排名就可以看到,数据库不仅仅有我们平时用到的关系型数据库,还有非关系型数据库的键值(Key-Value)数据库、列存储数据库、文档数据库和搜索引擎等类型。下面本文将简单介绍一下各种类型的数据。
2.1、关系型数据库
关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据,我们平常使用的数据库,像MySQL、SqlServer、Oracle、PostgreSQL、SQLite等都是传统的关系型数据库。
在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系表格上。在大型系统中通常有多个表,且表之间有各种关系。实际使用就是通过对这些关联的表格分类、合并、连接或选取等运算来实现数据库的管理。
这种类型的数据库是最古老的数据库类型,关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式), 如图2是一个二维表的实例。通常该表第一行为字段名称,描述该字段的作用,下面是具体的数据。在定义该表时需要指定字段的名称及类型。
几种主流关系型数据库对比:
2.2、非关系型数据库(NoSQL)
Nosql = not only sql,意即“不仅仅是sql”,泛指非关系型数据库。这些类型的数据存储不需要固定的模式(当然也有固定的模式),无需多余的操作就可以横向扩展。
几种主流非关系型数据库对比:
(1)键值存储数据库
键值数据库是一种非关系数据库,它使用简单的键值方法来存储数据。键值数据库将数据存储为键值对集合,其中键作为唯一标识符。典型产品:Redis、Memcached等。
如上图是某公有云的键值存储示意图,其中键包含分区键和排序键,而值包含更多的实际信息。比如实际使用是可以以学号为键,姓名、性别、年龄和班级等信息为值进行存储。实际存储形式很灵活,是业务需求自行定义即可。
键值数据库目前应用最多的应该是Redis,Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis通常最为普通关系型数据库的缓存层,用于降低数据库的访问压力,提升系统性能。
(2)列存储数据库
列式存储(column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。简单来说两者的区别就是对表中数据的存储形式的差异。典型产品:HBase、Clickhouse等。列存储数据库中最为出名的恐怕就是HBase了,HBase是 BigTable 的开源 java 版本。是建立在 HDFS 之上,提供高可靠性、高性能、列存储、 可伸缩、实时读写 NoSQL 的数据库系统。
如图是传统行数据库和列数据库表中数据在磁盘上的存储形式的差异对比。对于行存储数据库,表中的数据是以行为单位逐行存储在磁盘上的;而对于列存储数据库,表中的数据则是以列为单位逐列存储在磁盘中。
列存储解决的主要问题是数据查询问题。我们知道,平时的查询大部分都是条件查询,通常是返回某些字段(列)的数据。对于行存储数据,数据读取时通常将一行数据完全读出,如果只需要其中几列数据的情况,就会存在冗余列,出于缩短处理时间的考量,消除冗余列的过程通常是在内存中进行的。而列存储,每次读取的数据是集合的一段或者全部,不存在冗余性问题。这样,通过这种存储方式的调整,使得查询性能得到极大的提升。
(3)面向文档数据库
文档数据库种类繁多,包括MongoDB、CouchDB、 Terrastore、RavenDB和OrientDB等多大十几个。其中MongoDB是目前最为流行的文档数据库,其介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。其最大的特点是分布式部署,可以随着负载的增大动态扩容,从而满足企业业务增长的需求。
此类数据库可存放并获取文档,可以是XML、JSON、BSON等格式,这些文档具备可述性(self-describing),呈现分层的树状结构(hierarchical tree data structure),可以包含映射表、集合和纯量值。数据库中的文档彼此相似,但不必完全相同。文档数据库所存放的文档,就相当于键值数据库所存放的“值”。文档数据库可视为其值可查的键值数据库。
(4)图形数据库
属性图数据库,简称图数据库。图形数据库顾名思义,就是一种存储图形关系的数据库。图形数据库是NoSQL数据库的一种类型,它应用图形理论存储实体之间的关系信息。关系型数据用于存储明确关系的数据,但对于复杂关系的数据存储却有些力不从心。如图4这种人物之间的关系,如果用关系型数据库则非常复杂,用图形数据库将非常简单。
图数据库完全和知识图谱契合,从底层的存储模型到支持的查询语言,甚至相关的概念都完全匹配。它们就是天造地设的一对,图数据库是知识图谱存储的首选。 常见的图数据库包括:Neo4J、JanusGraph\ArangoDB、OrientDB、FlockDB、GraphDB、InfiniteGraph、Titan和Cayley等。其中Neo4j 是目前最流行的图形数据库,支持完整的事务,在属性图中,图是由顶点(Vertex),边(Edge)和属性(Property)组成的,顶点和边都可以设置属性,顶点也称作节点,边也称作关系,每个节点和关系都可以由一个或多个属性。Neo4j创建的图是用顶点和边构建一个有向图,其查询语言cypher已经成为事实上的标准。
图4 图形数据库示例
(5)时序数据库
时序数据是随时间不断产生的一系列数据,简单来说,就是带时间戳的数据。时序数据库 (Time Series Database,TSDB) 是优化用于摄取、处理和存储时间戳数据的数据库。此类数据可能包括来自服务器和应用程序的指标、来自物联网传感器的读数、网站或应用程序上的用户交互或金融市场上的交易活动。
虽然其他数据库也可以在数据规模较小时一定程度上处理时间序列数据,但 TSDB可以更有效地处理随时间推移的数据摄取、压缩和聚合。简而言之,时序数据库是专门用于存储和处理时间序列数据的数据库,支持时序数据高效读写、高压缩存储、插值和聚合等功能
主流时序数据库有InfluxDBX、Prometheus、Apache IoTDBX:
(6)向量数据库
向量数据库(Vector DB)是一个新兴的领域,它专门处理高维空间的数据点,也就是向量。这些向量通常是从各种非结构化数据(如音频、视频、图像和文本)中提取出来的,它们能够通过计算相似性来支持诸如相似图片查找、产品推荐、异常检测和大量输入数据的临时存储等应用场景。
传统的数据库系统,如关系型数据库(Relational DB)、键值存储(Key-Value Store)、文档数据库(Document DB)和图形数据库(Graph DB),各自有优势,但它们在处理大量高维向量数据时可能效率不高。而分析型数据库(OLAP DB)虽然能处理复杂查询,但也不专门针对向量数据。向量检索是一个革命性的技术,使得开发者和工程师可以将知识或数据向量化之后实现更有效的存储、检索以及推荐。通过对比这些向量两两之间的相似性,可以实现快速、直观、无缝的信息检索。
向量数据库的出现,特别是在人工通用智能(AGI)领域的进步推动下,它们提供了快速检索和相似性搜索的能力。它们支持增删改查(CRUD)操作、元数据过滤和水平扩展等功能。正因为这些功能,向量数据库在处理特定类型的数据时可以更加高效。
尽管Redis、ElasticSearch和PostgreSQL等通用数据库和搜索引擎已经开始支持向量数据处理,专业的向量数据库还是有其存在的必要。这是因为它们为特定的用例提供了优化,例如在处理高维向量的相似性搜索和快速检索时,通常能提供更高的性能和更有效的资源利用。
专业的向量数据库如Pinecone、Milvus、Weaviate、Chroma和Qdrant等已经获得了大量的资金投入,这表明市场对这类数据库的需求很大。资金的投入也推动了这些数据库在技术上的快速发展,使得它们能够提供更为专业化的服务,满足日益增长的市场需求。
数据库名称 | 是否开源 | 社区影响力 | 编程语言 | 核心特性 | 适用场景 |
Pinecone | 否 | 未知 | 向量存储与检索、全托管 | Saas类业务场景 | |
weaviate | 是 | 5.3k star | Go | 同时支持向量与对象的存储、支持向量检索与结构化过滤、具备主流模式成熟的使用案例。高速、灵活,不仅仅具备向量检索,还会支持推荐、总结等能力 | |
qdrant | 是 | 6.3k star | Rust | 向量存储与检索、云原生、分布式、支持过滤、丰富的数据类型、WAL日志写入 | |
milvus | 是 | 17.7k star | Go | 极高的检索性能: 万亿矢量数据集的毫秒级搜索非结构化数据的极简管理丰富的API跨平台实时搜索和分析可靠:具有很高的容灾与故障转移能力高度可拓展与弹性支持混合检索统一的Lambda架构社区支持、行业认可 | |
Chroma | 是 | 4.1k star | python | 轻量、内存级 |
(7)搜索引擎存储
搜索引擎数据库是应用在搜索引擎领域的数据存储形式,由于搜索引擎会爬取大量的数据,并以特定的格式进行存储,这样在检索的时候才能保证性能最优。典型产品:Solr、Elasticsearch等。
搜索引擎数据库最近比较火的包括Solr和Elasticsearch等。Solr是Apache 的一个开源项目,基于业界大名鼎鼎的java开源搜索引擎Lucene。在过去的十年里,solr发展壮大,拥有广泛的用户群体。solr提供分布式索引、分片、副本集、负载均衡和自动故障转移和恢复功能。如果正确部署,良好管理,solr就能够成为一个高可靠、可扩展和高容错的搜索引擎。
Elasticsearch构建在Apache Lucene库之上,同是开源搜索引擎。Elasticsearch在Solr推出几年后才面世的,通过REST和schema-free的JSON文档提供分布式、多租户全文搜索引擎。并且官方提供Java,Groovy,PHP,Ruby,Perl,Python,.NET和Javascript客户端。目前Elasticsearch与Logstash和Kibana配合,部署成日志采集和分析,简称ELK,它们都是开源软件。最近新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash。
三、关系型数据库和非关系型数据库对比
架构设计有一句流行语:不以业务模型为基础的架构设计都是耍流氓。同样数据库选型也应该根据自己业务需求选择最适合自己的数据库。
参考链接:
数据库种类大全及区别
关于NoSql的理解,键值数据库,文档数据库,列式存储数据库,图形数据库_简述到目前为止所学的 nosql 存储方式采用什么语言开发的?
开源数据库有哪些
主流时序数据库分析及选型
图数据库选型对比
关于NoSql的理解,键值数据库,文档数据库,列式存储数据库,图形数据库