自上世纪80年代以来,数据库已取得了长足的进展,早期数据库仅在大型机上运行,用户只能在网状数据库(CODASYL)和关系数据库之间进行选择。网状数据库的速度往往比关系数据库快一倍,但最终计算机硬件方面的改进和SQL查询的便利性(相对编写导航型数据库代码)促使关系数据库占据市场主要位置。
现在,数据库可以在任何地方运行,从智能手机、数据中心的服务器,到地域分散的云环境。除了关系表格数据库以外,还有面向时间序列、图、空间、文本、联机分析处理(OLAP)、XML和JSON等数据的数据库。一些数据库专门处理某一种数据,一些数据库允许用户选择数据类型,但每次只处理一种;一些数据库允许多种类型的数据共存于同一数据库实例中,一些数据库擅长联机事务处理(OLTP),一些数据库主攻联机分析处理(OLAP),还有一些数据库适合处理事务和分析混合工作负载。
我们将讨论的一些数据库可以在本地运行,一些数据库专门支持云环境,但与本地数据库兼容;一些数据库是"云原生",这意味着它们只能从云提供商处获得。
确定数据库需求
数据库本身几乎从来不是独立存在的。相反,数据库通常是应用系统的后端或存储层。
如果该应用是遍布全球的多人玩的视频游戏,那么读取延迟和写入延迟都很重要,数据库可能需要分布式,不过不一定是关系型的,也不一定要有强一致性;键值数据库可能很理想。如果该应用记录和监测来自阀门的传感器输出,数据库应该能够快速写入大量的时间序列数据。
你会生成多少数据?生成数据有多快?
几乎任何云数据库都可以处理少量的数据(数GB或更少),一些云数据库可以在内存中处理这些数据,许多云数据库可以处理数TB(数千GB)的数据,只有少数可以支持数PB(数百万GB)的数据。请注意,大多数云数据库按月收取存储费,SSD存储方面的费用高于磁盘存储。
数据到达的速度会给其他指标带来压力,比如数据库写入速度和网络容量。如果大量数据突然到达,数据库或前端程序在将数据写入到永久存储设备时可能需要将数据缓存在内存中,以免数据丢失。人们常提到的Redis(一种内存中数据结构存储,用作数据库、缓存和消息代理)能够为其他数据库缓存大量突发数据。
你预先知道数据库模式吗?
如果你的数据库模式(数据的结构)是预先确定的,不太可能随时间的推移而发生显著变化,如果你希望大多数字段面对不同的记录有一致的类型,那么SQL数据库是不错的选择。否则,NoSQL数据库可能更适合你的应用。
不过也有例外。比如说,Rockset这种操作型数据库允许SQL查询,无需要求它所导入的数据有固定模式或一致类型。
哪种形状适合你的数据?
关系SQL数据库将强类型数据存储在拥有行和列的矩形表中,比如Microsoft SQL Server、PostgreSQL和MySQL。它们依赖表与表之间的定义关系,使用索引加快选定的查询,并使用JOINS一次查询多个表。许多现代关系数据库(包括Oracle Database)也支持其他形状。
文档数据库通常存储可能包含数组和嵌套文档的弱类型JSON(文本或二进制),比如MongoDB和Couchbase。图数据库存储具有属性的顶点和边,比如Neo4j,或者存储RDF三元组,比如AllegroGraph。无论是哪种实现方法,图数据库都强调实体之间的联系。其他类别的NoSQL数据库包括键值数据库(比如 RocksDB)和列式存储数据库(比如Cassandra)。
有时,数据以一种适用于分析的形状被获取,有时并非如此,因此需要进行转换。有时一种数据库建立在另一种数据库上。比如说,键值存储数据库几乎可以用作任何类型的数据库的基础。
你的延迟要求是什么?
延迟是指数据库的响应时间和应用系统的端到端响应时间。在理想情况下,每个用户操作的响应时间都在亚秒级,这常常意味着需要数据库在100毫秒内为每个简单事务做出响应。分析查询常常需要几秒钟甚至几分钟,应用系统可以通过在后台运行复杂的查询来维持响应时间。
云端运行数据库会使延迟的测量很复杂。这里涉及多个因素:最简单的考量因素是客户端和数据库之间的延迟,因数据库查询响应而增加了总体延迟。一个更复杂的考量因素是,在分布式数据库中提交事务可能需要等待地理分布区域中的写入,尤其是在数据库保持强一致性的情况下。
作者:Martin Heller现为《InfoWorld》网站的特约编辑兼评论员,此前担任Web和Windows编程顾问。从1986年至2010年,Heller一直从事数据库、软件和网站的开发工作。近期,他出任Alpha Software的技术和教育副总裁,还是Tubifi的主席兼首席执行官。
原文网址:https://www.infoworld.com/article/
3627792/how-to-choose-a-cloud-database.html