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