当前位置: 首页 > 科技观察

开源数据库那么多,你知道有多少种吗

时间:2023-03-22 17:32:31 科技观察

数据库字面意思是数据仓库,其实我们平时说的数据库指的是数据库管理系统(DatabaseManagementSystem),它是一个大型-scalesystemformanipulatingandmanagingdatabases用于创建、使用和维护数据库的软件,简称DBMS。严格来说,数据库是数据库管理系统的一个实例,一个数据库管理系统可以有多个数据库实例。数据库有很多种,我们平时接触最多的大概就是Oracle数据库或者MySQL数据了。两者都是使用最广泛的关系数据。图1是2018年12月的使用排名,从排名中也可以看出,以上两个数据库分别排名第一和第二。图1数据库排名数据库的分类仔细看图1的排名可以看出,数据库不仅包括我们平时学习的关系型数据库,还包括键值(Key-Value)数据库、列存储数据库、文档数据库和搜索引擎的类型。下面的文章将简要介绍各种类型的数据。关系数据库:这种类型的数据库是最古老的数据库类型。关系数据库模型将复杂的数据结构归结为简单的二元关系(即二维表),如图2所示,是一个二维表实例。通常这个表中行为字段的字段名描述了该字段的作用,下面是具体的数据。在定义表时,需要指定字段的名称和类型。图2数据库表示例在关系数据库中,几乎所有的数据操作都是基于一个或多个关系表。在大型系统中,通常有多个表,它们之间存在各种关系。实际使用是通过对这些关联表进行分类、合并、连接或选择等操作来实现对数据库的管理。键值存储数据库:键值数据库是一种非关系数据库,它使用简单的键值方法来存储数据。键值数据库将数据存储为键值对的集合,其中键充当唯一标识符。图2键值数据库基本原理图2是公有云中键值存储的示意图,其中键包括分区键和排序键,值包括更多的实际信息。例如在实际使用中,可以将学号作为key,将姓名、性别、年龄、班级等信息作为value进行存储。实际的存储形式非常灵活,可以根据业务需求来定义。列存储数据库:列式存储(column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)而言的。简单的说,两者的区别就是数据在表中存储形式的不同。图3列存数据图3是传统行数据库和列数据库表数据在磁盘上的存储形式对比。对于行存储数据库,表中的数据是逐行存储在磁盘上的;对于列存储数据库,表中的数据是按列存储在磁盘上的。列存主要解决的问题是数据查询。我们知道,通常的查询大多是条件查询,通常返回某些字段(列)的数据。对于行存储数据,在读取数据时,通常会将一行数据完全读出。如果只需要几列数据,就会有多余的列。为了缩短处理时间,剔除冗余列的过程通常在内存中进行。对于列存,每次读取的数据都是集合的一部分或者全部,不存在冗余问题。这样,通过这种存储方式的调整,查询性能得到了很大的提升。面向文档的数据库:这类数据库可以存储和获取文档,可以是XML、JSON、BSON等格式。这些文档是自描述的,并呈现分层树数据结构。包含映射、集合和标量值。数据库中的文档彼此相似,但不一定相同。文档数据库中存储的文档相当于键值数据库中存储的“值”。文档数据库可以看作是一个key-value数据库,其值可以被查找。图数据库:顾名思义,图数据库就是存储图关系的数据库。图数据库是一种NoSQL数据库,它应用图论来存储实体之间的关系信息。关系型数据用于存储关系清晰的数据,但对于关系复杂的数据存储就有些力不从心了。如图4所示的人物关系,如果用关系数据库会很复杂,但是如果用图数据库就很简单了。图4图数据库示例搜索引擎存储:搜索引擎数据库是应用于搜索引擎领域的一种数据存储形式。由于搜索引擎会抓取大量数据并以特定的格式存储,因此在检索时可以保证性能***。不同类型的数据库软件关系数据库:关系数据库最经典的开源软件是MySQL,它是最流行的开源关系数据库管理系统。在WEB应用方面,MySQL是最著名的RDBMS(RelationalDatabaseManagementSystem:关系数据库管理系统)应用软件之一。SUN被甲骨文收购后,MySQL的原班人马拉出另一个分支,取名为MariaDB。该数据库被维基百科、Facebook甚至谷歌等科技巨头使用。MariaDB是一个数据库服务器,它提供了MySQL的插件替代品。开发人员最关心的是安全性,在每个版本中,开发人员还整合了MySQL的所有安全修复程序,并在需要时对其进行了增强。此外,还有很多开源的关系型数据库,比如经典的文件数据库SQLite、针对Web服务优化的CUBRID等。键值存储数据库:Redis是目前使用最广泛的键值数据库。Redis是一个开源的日志型和Key-Value数据库,用ANSIC语言编写,支持网络,可以是基于内存的,也可以是持久化的,并提供多种语言的API。Redis通常是最常见的关系型数据库的缓存层,用于降低数据库的访问压力,提高系统性能。列存数据库:列存数据库最著名的大概就是HBase了,它是BigTable的开源java版本。它是一个建立在HDFS之上的数据库系统,提供了NoSQL的高可靠、高性能、列存储、可扩展性、实时读写。面向文档的数据库:文档数据库的种类很多,包括MongoDB、CouchDB、Terrastore、RavenDB、OrientDB等十几种。其中,MongoDB是目前最流行的文档数据库。它是介于关系数据库和非关系数据库之间的产物。它是非关系数据库中功能最强的,与关系数据库最相似。其最大的特点是分布式部署,可以随着负载的增加动态扩容,以满足企业业务增长的需要。图数据库:图的种类很多,例如Neo4J、ArangoDB、OrientDB、FlockDB、GraphDB、InfiniteGraph、Titan、Cayley等。其中,Neo4j是目前最先进的支持完整事务的图数据库。在属性图中,图由顶点(Vertex)、边(Edge)和属性(Property)组成。也叫节点,边也叫关系,每个节点和关系都可以有一个或多个属性。Neo4j创建的图就是构建一个有顶点和边的有向图,其查询语言cypher已经成为事实上的标准。搜索引擎存储:最近流行搜索引擎数据库,包括Solr和Elasticsearch。Solr是Apache的开源项目,基于业界知名的java开源搜索引擎Lucene。在过去十年中,Solr不断发展壮大,拥有广泛的用户群。Solr提供分布式索引、分片、副本集、负载平衡以及自动故障转移和恢复。如果部署和管理得当,Solr可以成为高度可靠、可扩展和容错的搜索引擎。Elasticsearch建立在ApacheLucene库之上,它也是一个开源搜索引擎。Elasticsearch在Solr之后几年问世,它通过REST和无架构的JSON文档提供分布式、多租户的全文搜索引擎。并正式提供Java、Groovy、PHP、Ruby、Perl、Python、.NET和Javascript客户端。目前Elasticsearch与Logstash、Kibana合作部署日志收集和分析,简称ELK,都是开源软件。最近新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent)。Filebeat占用资源少,适合收集各台服务器上的日志,传输到Logstash。