主流数据库类型总结

 前言:随着互联网的高速发展,为了满足不同的应用场景,数据库的种类越来越多容易混淆,所以有必要在此总结一下。数据库根据数据结构可分为关系型数据库和非关系型数据库。非关系型数据库中根据应用场景又可分为键值(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),可以包含映射表、集合和纯量值。数据库中的文档彼此相似,但不必完全相同。文档数据库所存放的文档,就相当于键值数据库所存放的“值”。文档数据库可视为其值可查的键值数据库。

开源数据库有哪些,开源数据库有哪些 MySQL(开源数据库这么多,你知道几种)


(4)图形数据库

属性图数据库,简称图数据库。图形数据库顾名思义,就是一种存储图形关系的数据库。图形数据库是NoSQL数据库的一种类型,它应用图形理论存储实体之间的关系信息。关系型数据用于存储明确关系的数据,但对于复杂关系的数据存储却有些力不从心。如图4这种人物之间的关系,如果用关系型数据库则非常复杂,用图形数据库将非常简单。

图数据库完全和知识图谱契合,从底层的存储模型到支持的查询语言,甚至相关的概念都完全匹配。它们就是天造地设的一对,图数据库是知识图谱存储的首选。 常见的图数据库包括:Neo4J、JanusGraph\ArangoDB、OrientDB、FlockDB、GraphDB、InfiniteGraph、Titan和Cayley等。其中Neo4j 是目前最流行的图形数据库,支持完整的事务,在属性图中,图是由顶点(Vertex),边(Edge)和属性(Property)组成的,顶点和边都可以设置属性,顶点也称作节点,边也称作关系,每个节点和关系都可以由一个或多个属性。Neo4j创建的图是用顶点和边构建一个有向图,其查询语言cypher已经成为事实上的标准。


                                                    图4 图形数据库示例

开源数据库有哪些,开源数据库有哪些 MySQL(开源数据库这么多,你知道几种)


(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类业务场景
weaviate5.3k starGo同时支持向量与对象的存储、支持向量检索与结构化过滤、具备主流模式成熟的使用案例。高速、灵活,不仅仅具备向量检索,还会支持推荐、总结等能力
qdrant6.3k starRust向量存储与检索、云原生、分布式、支持过滤、丰富的数据类型、WAL日志写入
milvus17.7k starGo极高的检索性能: 万亿矢量数据集的毫秒级搜索非结构化数据的极简管理丰富的API跨平台实时搜索和分析可靠:具有很高的容灾与故障转移能力高度可拓展与弹性支持混合检索统一的Lambda架构社区支持、行业认可
Chroma4.1k starpython轻量、内存级

(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。


三、关系型数据库和非关系型数据库对比

架构设计有一句流行语:不以业务模型为基础的架构设计都是耍流氓。同样数据库选型也应该根据自己业务需求选择最适合自己的数据库。


参考链接:

拯救爆表的MySQL:小红书万亿级图存储系统自研与迁移之路

数据库种类大全及区别

关于NoSql的理解,键值数据库,文档数据库,列式存储数据库,图形数据库_简述到目前为止所学的 nosql 存储方式采用什么语言开发的?

开源数据库有哪些

主流时序数据库分析及选型

图数据库选型对比

关于NoSql的理解,键值数据库,文档数据库,列式存储数据库,图形数据库

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
数据库原理及技术》课程设计 一、课程设计的目的和要求 (1)培养学生理解与《数据库原理》课程相关的理论知识,学会分析实际问题的能力。 (2)培养学生运用《数据库原理》相关知识设计系统应用的思想和方法。 (3)培养学生查阅技术文献、资料、手册以及编写技术文献的能力。 (4)掌握主流数据库开发及系统设计技术,具体要求如下: 关系数据库采用Oracle、 SqlServer、MySQL等; 开发语言采用JSP+Java或.Net等; 系统构架采用SSH、SSM等MV C多层结构; 运行模式为B/S模式,要求至少能在Google、360、QQ、ie等一种主流浏览 器中运行; 中间件采用Tomcat、IIS等; 一人一题,不得私自换题,否则按零分计。 二、课程设计报告提纲 (1) 课程设计的题目、系统的总体功能描述 (2) 需求分析(概括描述、DFD、DD) (3) 数据库概念结构设计(局部E-R图、基本E-R图) (4) 数据库逻辑结构设计(关系模式—表形式、存储过程、触发器、视图、索引) (5) 应用系统功能结构图(模块结构图) (6) 各功能模块程序流程图及其说明 (7) 程序源代码及其说明 (8) 总结(课程设计中遇到的主要问题和解决方法;创新和得意之处;课程设计中存在的不足 ,需进一步改进的设想;课程设计的感想和心得体会。) (9) 参考文献 三、评分规则 1、按照要求完成全部功能设计50分; 2、文档撰写文档30分; 3、上机检查答辩20分。 4、总评成绩折算成优、良、中、及格、不及格 四、课程设计作业提交 每人将设计的全部文档整理到一个word文件中。文件命名方式为:学号+姓名。统一交给 班长或学习文员,然后打包发送给任课老师。 课程设计题目 (1)学校图书借阅管理系统 功能要求: 实现图书信息、类别、出版社等信息的管理; 实现读者信息、借阅证信息的管理; 实现图书的借阅、续借、归还管理; 实现超期罚款管理、收款管理; 创建触发器,分别实现借书和还书时自动更新图书信息的在册数量; 创建视图查询各种图书的书号、书名、总数和在册数; 创建存储过程查询指定读者借阅图书的情况; 建立数据库相关表之间的参照完整性约束。 (2)高校学籍管理系统 功能要求: 实现学生信息、班级、院系、专业等的管理; 实现课程、学生成绩信息管理; 实现学生的奖惩信息管理; 创建规则用于限制性别项只能输入"男"或"女"; 创建视图查询各个学生的学号、姓名、班级、专业、院系; 创建存储过程查询指定学生的成绩单; 创建触发器当增加、删除学生和修改学生班级信息时自动修改相应班级学生人数; 建立数据库相关表之间的参照完整性约束。 (3)学校人力资源管理系统 实现学校部门信息、职务、职称和教职工信息管理; 实现教师的学籍经历管理; 实现教师的家庭关系管理; 实现教师的奖惩信息管理; 创建存储过程查询学校各部门各种职称的教职工数量; 创建触发器当增加、删除教职工和修改教职工部门信息时自动修改相应部门的职工 人数; 创建规则用于保证教职工的E-Mail的输入格式正确; 建立数据库相关表之间的参照完整性约束。 (4)某书店图书进货、销售管理系统 实现图书类别、出版社、图书、仓库信息的管理; 实现进货、入库管理; 实现销售、出库管理; 创建存储过程查询某段时间内各种图书的进货和销售情况; 创建视图查询各类图书的库存总数; 创建触发器当图书入库时自动修改相应图书的总量和存放仓库中该图书的数量; 要求一单可以处理多种图书(比如销售设置销售单及其明细两个表); 建立数据库相关表之间的参照完整性约束。 (5)某医院信息管理系统(药品库存、收费、医生病人等) 实现药品类型及药品信息的管理; 实现药品的入库、出库管理; 实现科室、医生、病人的管理; 实现处方的登记管理; 实现收费管理; 创建触发器,当药品入库、出库时自动修改库存; 创建存储过程统计某段时间内,各科室的就诊人数和输入情况; 创建视图查询各种药品的库存总数; 建立数据库相关表之间的参照完整性约束。 (6)某期刊的在线投稿审稿管理系统 实现作者、审稿人的信息管理; 实现稿件类型、稿件信息的管理; 实现稿件的审阅过程管理; 实现稿费、审稿费和版面费的管理; 创建存储过程,统计指定作者的稿件信息; 创建触发器,当收到审稿费时自动修改审稿费收到标记为"是"; 创建规则,使得作者的E-Mail必须满足电子邮件的基本格式; 建立数据库相关表之间的参照完整性约束。 (7)学校的工资管理系统 实现部门、职务、职称等基本信息的管理; 实现教职工信息的管理; 实现工资项目的管理,工资项目设有启用标志和加扣标志; 实现教职工工资项目及其工资的管理; 创建触发器当往教职工工资项目表中插入记录或删除记录时,自动修改该职工的应 发工资数和实发工资

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java架构何哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值