从1980年代开始出现历史上一直在夶型机或单个服务器上运行-这就是我们所拥有的。 如果希望数据库处理更多数据并运行得更快则必须将其放在具有更多,更快的CPU内存囷磁盘的更大服务器上。 换句话说您转向垂直可伸缩性或“向上扩展”。 稍后如果您需要故障转移功能以提高可用性,则可以将热备份服务器与活动服务器并置在“主动-被动”群集中通常与共享存储一起使用。
ACID的四个属性(原子性一致性,隔离性和持久性)是必需嘚以确保即使在发生网络分区,电源故障和其他错误的情况下数据库事务也始终有效。 单个服务器上的数据库要符合所有四个ACID属性相對容易 对于分布式数据库而言,实现起来有点困难
(于2009年左右推出)具有水平可伸缩性(意味着它们可以在多个服务器上运行),但通常缺乏完全的ACID合规性并且通常不支持SQL语言。 NoSQL数据库引入了“最终一致性”的概念这意味着如果您从一台服务器写入数据库并立即从叧一台服务器读取数据库,则可能看不到与从原来的服务器读取数据库时得到的结果相同的结果书面。 但是如果等待了足够长的时间,新数据将被复制到群集中的所有服务器并且将保持一致。 最终的一致性对于许多应用程序(例如在线目录)来说已经足够好了但是對于财务而言却不够好。
最近已经引入了几个可横向扩展的“横向扩展” SQL数据库。 更好的是其中一些服务器可以处理具有地理分布的垺务器,而无需牺牲一致性 由于光速的限制,距离非常远的服务器节点比本地节点需要更长的更新时间但是有几种技术可以缓解该问題,包括使用共识组仲裁以及超高速网络和存储
通常,您一直在使用的数据库和您想使用的新分布式数据库应尽可能兼容以最大程度哋减少架构和应用程序转换成本。 在最简单的情况下您可以迁移架构和数据,然后只需在应用程序中更改连接字符串 在最复杂的情??况下,您将需要完成数据转换过程对存储过程和触发器的完全重写,以及对应用程序的数据层(包括SQL查询)的重大重写
可以将Amazon RDS数据庫配置为具有同步辅助实例进行故障转移的高可用性。 不幸的是您无法从备用辅助实例读取。 您可以使用MySQLMariaDB或PostgreSQL只读副本来增加读取比例,但是该副本是异步的因此副本的状态可能落后于主实例的状态。
您可以在数据库集群中最多创建15个Aurora副本以支持只读查询并且可以在哆个可用区(AZ)中创建副本,以实现全局分发
根据Amazon的说法,Aurora可以提供MySQL吞吐量的五倍和PostgreSQL吞吐量的三倍而无需更改大多数现有应用程序。 亞马逊还声称更新Aurora只读副本的延迟时间约为20毫秒这比MySQL只读副本快得多。
Azure SQL数据库是一种完全托管的关系云数据库服务提供广泛的SQL Server引擎兼嫆性,并允许您动态地上下扩展数据库资源 Azure SQL数据库包括用于创建的选项,该地理是按地理位置分布的辅助数据库
在相同或不同的区域Φ最多支持四个辅助数据库,并且这些辅助数据库还可以用于只读查询 如果需要将主数据库故障转移到辅助数据库之一,则可以手动或通过API进行
现在由MariaDB拥有的是横向扩展的,集群化的关系型HTAP(混合事务/分析处理)数据库其设计为无共享架构。 ClustrixDB主要与MySQL和MariaDB兼容 当我回顾ClustrixDB時,该产品缺乏对空间扩展类型和全文本搜索的支持 它仍然缺少两者。
将节点添加到ClustrixDB可以扩展读取和写入 ClustrixDB允许群集跨多个区域部署,鉯在计划外区域故障期间提供容错能力 在独立实验室(但不是由InfoWorld进行)的测试中,ClustrixDB能够在15毫秒的延迟下每秒完成4万笔事务负载为90%的讀取和10%的写入,从而使其具有“网络星期一”的电子商务可扩展性
CockroachDB建立在交易和一致的键值存储RocksDB之上。 CockroachDB背后的主要设计目标是支持ACID事務水平可伸缩性和(最重要的)生存能力,因此得名 默认情况下,CockroachDB使用可序列化的隔离模式这种隔离模式比大多数其他数据库实现嘚隔离模式要强。
是一个托管的分布式数据库具有NoSQL数据库的可伸缩性,同时保留了SQL兼容性关系架构,ACID事务和外部一致性 。
Spanner被分片铨局分布和复制,并使用Paxos算法在其节点之间达成共识 Spanner使用两阶段提交来实现强一致性,但是将Paxos组视为事务的成员 每个Paxos组仅需要一个法萣人数,而不是其成员的100%
在Google的内部使用中,Spanner的可用性已超过5个9即99.999%以上,这意味着每年的停机时间不到5分钟 这足够好,大多数程序员通常不必费心编写代码来处理Spanner的可用性故障