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

除了MySQL数据库,还有一些你需要了解的数据库

时间:2023-03-21 11:46:23 科技观察

数据库是我们项目开发过程中必不可少的服务。相信大部分技术也接触过各种类型的数据库,比如Oracle、MySQL、MongoDB、Redis等知名数据库。数据库的选择也是我架构过程中的重中之重。什么样的场景适合什么样的数据库,各数据库有什么特点,在架构中扮演什么角色,主要承担哪些业务?我们在DB-ENGINES(https://db-engines.com/en/ranking)中看到,参与排名的数据库多达354个。如下图所示,这里有一份2021年7月的数据库排名,供参考。所以本文主要是为大家普及一些常用或者流行的数据库,让大家了解。以后在选择数据库的时候,也可以多方面考虑,选择适合业务场景的数据库。人的精力是有限的,我们不需要了解每一个数据库的细节,但是我们可以根据自己的业务使用场景选择合适的数据库范围,然后进行有针对性的分析和选择。数据库按类型可分为以下几类:关系数据库文档数据库键值数据库图数据库时序数据库检索数据库列存储数据库根据类型,我们简单介绍一下我们经常使用、关注或常见的数据库.关系数据库关系数据库模型以行和列的形式存储复杂的数据结构,类似于Excel表格的数据形式。在关系数据中,对数据的操作几乎总是基于一个或多个关系表。数据库管理是通过表之间的关系来实现的。典型的数据库有Oracle、MySQL等,Oracle和MySQL是目前最流行的关系型数据。从上面的排名可以看出,两人常年都在排行榜的前2。Oracle是甲骨文公司的关系型数据库管理系统。一直是数据库领域的领先产品。它是一种高效、可靠、高吞吐量的数据库解决方案。Oracle的高性能、高可能性和可靠性是毋庸置疑的。早些年,世界500强企业几乎都选择了甲骨文。当然,Oracle是付费软件。MySQL是开源软件,与Oracle相比可以大大降低成本。MySQL最初的开发商是瑞典的MySQLAB,2008年被SunMicrosystems收购,2009年被Oracle公司收购,成为Oracle的产品。目前,MySQL有付费的企业版和免费的社区版。对于一般的个人用户或者中小企业来说,MySQL提供的功能是绰绰有余的。当年互联网流行LAMP(LNMP)架构,MySQL在其中扮演了重要角色。此外,PostgreSQL、OceanDB、TiDB、SQLServer、SQLite等都是关系型数据库。PostgreSQL是加州大学伯克利分校开发的基于Postgres的对象关系型数据库管理系统。它是根据灵活的BSD许可证发布的。任何人都可以出于任何目的免费使用、修改和分发PostgreSQL。OceanDB是阿里巴巴和蚂蚁金服100%自主研发的金融级分布式关系型数据库,在通用硬件上实现金融级高可用。TiDB是PingCAP自主设计开发的开源分布式关系型数据库。它是一个集成的分布式数据库产品,同时支持联机事务处理和联机分析处理。适用于高可用、强一致性要求高、数据规模大等应用场景。MicroSoftSQLServer相信大家都不陌生。是微软推出的关系型数据库解决方案。它的几个初始版本适用于中小企业的数据管理。近年来,应用范围不断扩大,触及大型跨国企业的数据管理。SQLite是一个遵循ACID的关系型数据库管理系统,但不同的是它不是一个client/server结构的数据库,而是集成在用户程序中。经过几十年的发展,关系型数据库已经非常成熟。强大的SQL功能和ACID属性使得关系型数据库广泛应用于各个行业的系统中,但这并不意味着关系型数据库就是完美的。例如:关系数据库是行存储,不能存储数据结构。关系数据库的模式受限强,不方便扩展。大数据场景,I/O高,全文搜索功能弱。因此,针对关系数据库的弱点,诞生了一种不同的方法。NoSQL解决方案,NoSQL可以作为SQL强大的辅助解决方案,NoSQL!=NotSQL,butNotOnlySQL。文档数据库文档数据库主要解决关系数据库中强模式约束的问题。它最大的特点是no-schema,可以存储或读取任意数据。大多数文档数据库中存储的数据格式是JSON或BSON。它的主要优点是:添加字段简单,不需要像SQL那样执行DDL语句修改表结构。历史数据兼容性强,即使没有新增字段也不会出错,只需要在代码层面做兼容即可。它可以存储复杂的数据结构,比SQL更简单。当然,文档数据库的优势也是有代价的。最重要的是它们不支持事务,这在一些事务性很强的应用场景中并不适用。另一个缺点是不能使用连接操作。因此需要在程序层面实现相应的业务。以MongoDB为代表。文档数据库以MongoDB和CouchDB为代表。MongoDB是一个基于分布式文件存储的数据库。采用C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。它是介于关系数据库和非关系数据库之间的产物。它是非关系数据库中功能最强大、最类似于关系数据库的。2015年12月,在3.2版本的发布中,MongoDB的聚合框架(Aggregation)加入了一个不起眼的算子:$lookup,同时也开启了支持关系型数据库的核心功能:association。2018年6月,MongoDB推出ACID事务支持,成为第一个支持强事务的NoSQL数据库。键值数据库提到K-V存储数据库,第一个想到的可能是Redis或者Memcache。主要解决关系型数据库不能存储数据结构的问题,具有极高的并发读写能力。K-V数据库不支持完整的ACID事务。在大流量的系统中,我们一般会使用redis或者memcache进行数据缓存,缓解数据库的压力,提高网站或者应用的响应速度。以Redis为例。Redis是K-V数据库的典型代表。Redis的Value是一种特定的数据结构。我们通常使用五种类型,包括字符串、哈希、列表、集合和有序集合。随着RedisUpdate的不断发展,数据结构也增加了HyperLogLog、位图、流、地理坐标等丰富的数据结构。每种数据结构都适用于解决一些特殊场景下的问题。如热点数据缓存、计数器、排行榜、队列、分布式缓存等。与Memcache不同,Redis还支持持久化、RDB模式、AOF模式、RDB-AOF混合模式(4.0后支持)。这里介绍另一个KV类型的数据库——Etcd。etcd是一个开源分布式统一键值存储,用于分布式系统或计算机集群的共享配置、服务发现和调度协调。帮助促进更安全的自动更新,协调主机的调度工作,并帮助为容器设置覆盖网络。图数据库(英文:graphdatabase,GDB[1])是一种使用图结构进行语义查询的数据库,它使用节点、边和属性来表示和存储数据。该系统的关键概念是图,它直接将存储中的数据项与数据节点和表示节点之间关系的边的集合相关联。这些关系允许商店中的数据直接链接在一起,并且在许多情况下,可以通过单个操作进行检索。图数据库优先考虑数据之间的关系。在图形数据库中查询关系很快,因为它们永久存储在数据库本身中。关系可以使用图形数据库进行可视化,这使得它们对于高度互连的数据非常有用。【摘自维基百科】随着社交、电子商务、金融、物联网的快速发展,图数据库的应用越来越广泛,比如在金融行业的风控、反欺诈应用等,社交场景中的关系图,电商领域的图数据库。产品推荐,实现精准营销等。Neo4j是一个用Java实现的开源图数据库,支持ACID、集群、备份和故障转移。可以使用其内置的RESTWEBAPI接口以及使用官方程序的专有Bolt协议从大多数编程语言访问它。从图数据库的排名也可以看出,Neo4j是目前市场上最受欢迎的图数据库之一。时序数据库时序数据库的全称是timeseriesdatabase。时序数据库主要用于处理带有时间标签的数据(时间顺序的变化,即时间序列化)。带有时间标签的数据也称为时间序列数据。时间序列数据主要由电力行业、化工行业等各类实时监测、检测、分析设备采集生成,这些行业数据的典型特征是:生成频率快(每个监测点可生成多个条数据),严重依赖于采集时间(每条数据需要唯一的时间),测点信息量大(传统实时监测系统有数万个监测点,监测点每秒产生数据,每天产生数十G数据)。【摘自百度百科】目前从DB-ENGINES可以看出InfluxDB比较流行。InfluxDB是InfluxData开发的一款开源时序数据库。它是用Go编写的,专注于以高性能查询和存储时间序列数据。InfluxDB广泛应用于存储系统数据监控、物联网行业实时数据等场景。可检索数据库搜索是我们项目中的基本功能之一。传统的关系型数据库利用索引来达到快速查询的目的,但是在全文搜索业务场景中,索引也是无能为力的。比如使用like查询是全表扫描,效率很低。我们经常使用的搜索引擎有Sphinx、Solr、Elasticsearch等,它们支持复杂的搜索表达式、全文搜索、词干分析、搜索结果的排序和分组等,与关系型数据库相比具有很大的性能优势。列存储数据库列数据库是将数据存储在列中的数据库,我们经常使用的关系型数据库称为“行数据库”。WideColumnStore,也称为ScalableRecordStore,将数据存储在记录中,能够容纳大量的动态列。由于列名和记录键不固定,记录可以有数十亿列,宽列存储可以看作是二维键值存储。列式数据库主要解决以HBase、Cassandra为代表的关系型数据库大数据场景下的I/O问题。归根结底,没有最好的数据库,只有最合适的数据库。项目在选择数据库时,必须结合自身的业务特点、架构选择、成本等因素综合考虑。同时,不要局限于自己熟悉的数据库。不能因为熟悉了就不管实际的业务场景和特点而去使用MySQL。