我正在尝试理解新的CockroackDB和其他分布式SQL数据库与云管理数据库(如Azure SQL数据库)之间的区别。
它们之间的用例似乎没有区别:
- 与各种NOSQL数据库一样,SQL(通常)允许分区键。
- 我可以在Azure中添加核心以根据需要提高性能,如果我有弹性工作负载,我也可以切换到Hyper-scale。
- 我可以在多个可用区域(地理位置)上跨多个节点进行读取复制
- 我可以在Azure SQL数据库中配置数据复制。
在我看来,云SQL数据库涵盖了较新的分布式数据库所涵盖的所有用例,所以我为什么要使用较新的产品呢?
基本上不是SQL Azure数据库分布式数据库服务器?
我错过什么了吗?
Azure SQL Server是分布式SQL数据库吗?
号
等各种NOSQL数据库SQL(一般)允许分区键。
NoSQL数据库(如Cassandra)(和Azure Table Storage)中的分区是关于将分区分布到物理上不同的节点,并且要求行具有显式设置的分区键值。
- Cassandra节点是物理上不同的机器,可以独立运行,这赋予了它出色的弹性。
SQL Server、Azure SQL和Azure SQL Managed Instance中的分区是关于将数据划分为存在于同一服务器中的行组,以提高性能,而不是弹性。
- 在本地MS SQL Server上,这些行组(分区)可以存在于不同的
FILEGROUP
中,这意味着它们可以存在于不同的存储卷中以避免IO瓶颈,但是Azure SQL不支持多个FILEGROUP
。- 实现分区的好处,包括在Azure SQL上实现分区的好处,都有在线文档记录-并且本文解释了它是如何与性能有关,而不是弹性。
- 在本地MS SQL Server上,这些行组(分区)可以存在于不同的
我可以在Azure中添加内核以根据需要提高性能,如果我有弹性工作负载,我也可以切换到Hyper-scale。
这个事实与分布式数据库毫无关系。
我可以在多个可用区域(地理位置)上跨多个节点进行读取复制。
我可以在Azure SQL数据库中配置数据复制。
- 复制与真正的分布式数据库不同:
- 在Cassandra等分布式数据库中,所有客户端都可以连接到所有节点,完成相同的任务;并且可以在系统运行时任意添加和删除节点。
- 在SQL Server和Azure SQL的复制特性中,副本是严格的"次要的";它从属于您的主服务器。
- 客户端可以连接到辅助服务器或主服务器,但辅助服务器只能执行只读查询,而如果客户端想要执行DML (
INSERT/UPDATE/DELETE/MERGE
)或DDL (CREATE/ALTER
),则客户端必须连接到主服务器。
- 客户端可以连接到辅助服务器或主服务器,但辅助服务器只能执行只读查询,而如果客户端想要执行DML (
因为Azure SQL不是分布式数据库,它不能允许任何客户端读取并将写入任何节点或端点并改变复制到所有其他节点(使用一个最终一致性模型)。相反,Azure SQL要求写操作由单个主"服务器"执行。在我看来,云SQL数据库涵盖了较新的分布式数据库所涵盖的所有用例,所以我为什么要使用较新的产品呢?
请注意Azure SQL"服务器";或逻辑服务器在很大程度上是一个抽象,它隐藏了Azure SQL的真正含义:在单个Azure数据中心中运行在高可用性Azure服务结构环境(这是如何在运行时添加和删除内核/RAM并提供某种针对硬件故障的本地弹性)的SQL server引擎的独特构建。