主流数据库类型总结

news2024/11/16 11:40:09

 前言:随着互联网的高速发展,为了满足不同的应用场景,数据库的种类越来越多容易混淆,所以有必要在此总结一下。数据库根据数据结构可分为关系型数据库和非关系型数据库。非关系型数据库中根据应用场景又可分为键值(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。


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

​​​​​​​

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


参考链接:

数据库种类大全及区别

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

开源数据库有哪些

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

图数据库选型对比

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1272091.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

跨境在线客服系统:打破国界的沟通壁垒

跨境在线客服系统在如今全球化的时代中扮演着重要的角色。随着电子商务的兴起,越来越多的企业将目光投向了国际市场。然而,跨境交流带来了语言、文化、时区等各种难题,给客服工作带来了巨大的挑战,而跨境在线客服系统成为了解决这…

Python编程新标准:十项好习惯提升编码质量

更多资料获取 📚 个人网站:ipengtao.com 1. 编写易读易维护的代码 编写清晰易读的代码是Python编程的核心。使用描述性变量名、规范的注释和文档字符串,让代码易于理解和维护。 # 示例代码:使用描述性变量名和规范注释 total_s…

AutoCAD 2024 中文

AutoCAD 2024是一款全球知名的计算机辅助设计软件,由Autodesk公司开发。它提供了丰富的绘图功能和工具,可以满足不同领域的需求,支持2D和3D绘图设计,包括平面图、立体图、剖面图等等。此外,AutoCAD 2024具备强大的数据…

Sourcepawn 脚本入门(一)准备

🍎Sourcepawn 脚本入门(一)准备 1.Sourcepawn是什么? Sourcepawn是SourceMod团队开发的基于source-sdk的服务器插件开发的一种脚本语言。 SourceMod: Half-Life 2 Scripting 它适用于大部分起源引擎的游戏,多见于L4D,CSS,CSGO, …

哪吒汽车拔头筹,造车新势力首家泰国工厂投产

中国造车新势力首家泰国工厂投产!11月30日,哪吒汽车位于泰国的首家海外工厂——泰国生态智慧工厂正式投产下线新车,哪吒汽车联合创始人兼CEO张勇、哪吒汽车泰国合作伙伴BGAC公司首席执行官万查曾颂翁蓬素等出席仪式。首辆“泰国制造”的哪吒汽…

使用jenkins插件Allure生成自动化测试报告

前言 以前做自动化测试的时候一直用的HTMLTestRunner来生成测试报告,后来也尝试过用Python的PyH模块自己构建测试报告,在后来看到了RobotFramework的测试报告,感觉之前用的测试报告都太简陋,它才是测试报告应该有的样子。也就是在…

岩土工程监测新利器——振弦采集仪

岩土工程监测新利器——振弦采集仪 振弦采集仪是一种常用的岩土工程监测仪器,主要用于测量岩土体的振动和应变情况。它采用先进的数字信号处理技术,可以实时采集和处理振弦信号,快速准确地获取岩土体的振动和应变信息。 振弦采集仪具有以下优…

6、Qt延时的使用

一、sleep() 1、说明 QThread类中如下三个静态函数: QThread::sleep(n); //延迟n秒 QThread::msleep(n); //延迟n毫秒 QThread::usleep(n); //延迟n微妙 这种方式使用简单,但是会阻塞线程,有界面时界面会卡死,一般在非GUI线…

简单0成本构建一个企业内部的视频点播、培训直播、安防监控、录像管理于一体的数字视频管理体系

以前,企业要构建一套数字化的视频管理体系,把企业内部的各种视频文件、直播培训、安防监控视频都整合到一套流媒体音视频服务里面,实现统一的对外供货、对外赋能的方案,是很困难的!因为,原来这都是好几个项…

Python函数装饰器的用法

Python函数装饰器的用法 文章目录 1.装饰器的优点2. 使用装饰器前3. 使用装饰器后 装饰器是Python中一种强大的语法特性,它允许在不修改已有代码的情况下,对函数或类进行增强或修改。装饰器的本质是一个函数,它接受一个函数作为参数&#xf…

激光科学六十年

1960年5月16日,在查尔斯汤斯(Charles Townes)和阿瑟肖洛(Arthur Schawlow)以及其他许多人早期工作的基础上,西奥多迈曼(Theodore Maiman)发射了第一台工作激光器:粉红红宝…

Java常用类(String相关类)-8

目录 包装类 装箱和拆箱 包装类型和String的转换,包装类的常用方法 Java_String 两种创建方式解析 测试 常用方法 Java_StringBuffer String和StringBuffer的转换 常用方法 Java_StringBuilder 包装类 装箱和拆箱 package com.edu.wrapper;public class …

ELK+filebeat+kafka

无需创建logstash的端口,直接创建topic 远程收集mysql和httpd的日志 (一)安装nginx和mysql服务 1、打开mysql的日志功能 2、创建日志(创库、创表、添加数据) (1)mysql服务器上安装http system…

软件开发流程:基础源代码与实战详解

一、引言 在当今的信息时代,软件开发已成为推动社会进步和发展的重要力量,从智能手机应用程序到复杂的企业级系统,软件开发在我们的日常生活和工作中发挥着越来越重要的作用。 然而,对于初学者来说,了解软件开发流程…

Python链式调用技巧:代码流畅无缝连接

更多资料获取 📚 个人网站:ipengtao.com 链式调用是一种编程风格,它允许将多个方法调用连接在一起,形成一个连贯的操作链。在Python中,链式调用常常用于使代码更简洁、易读,尤其在处理数据处理和函数式编程…

深入了解Java8新特性-日期时间API之ChronoUnit、ChronoField

阅读建议 嗨,伙计!刷到这篇文章咱们就是有缘人,在阅读这篇文章前我有一些建议: 本篇文章大概3000多字,预计阅读时间长需要5分钟。本篇文章的实战性、理论性较强,是一篇质量分数较高的技术干货文章&#x…

【人工智能Ⅰ】实验6:回归预测实验

实验6 回归预测实验 一、实验目的 1:了解机器学习中数据集的常用划分方法以及划分比例,并学习数据集划分后训练集、验证集及测试集的作用。 2:了解降维方法和回归模型的应用。 二、实验要求 数据集(LUCAS.SOIL_corr-实验6数据…

Python list列表添加元素的3种方法及删除元素的3种方法

Python list列表添加元素的3种方法 Python list 列表增加元素可调用列表的 append() 方法,该方法会把传入的参数追加到列表的最后面。 append() 方法既可接收单个值,也可接收元组、列表等,但该方法只是把元组、列表当成单个元素,这…

LeetCode(45)最长连续序列【哈希表】【中等】

目录 1.题目2.答案3.提交结果截图 链接: 最长连续序列 1.题目 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1&a…

目标检测——SPPNet算法解读

论文:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition 作者:Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun 链接:https://arxiv.org/abs/1406.4729 目录 1、算法概述2、Deep Networks with Spatia…