我曾在DataStax上阅读有关Apache Cassandra的文章,我注意到无论我们要编写的数据是什么,都会在所有节点之间平均分配。是否会出现在所有其他分布式数据库管理系统中?其他系统是否会平均分配数据库中的数据?如果他们不能平均分配,那么数据如何在这些分布式数据库中分发?
答案 0 :(得分:3)
我注意到无论我们要写的数据是什么,都会在所有节点之间平均分配。
不一定。您拥有的数据重复级别由复制因子决定,复制因子是基于每个键空间设置的。让我们说我有一个包含3个节点的集群,我定义了我的密钥空间,如下所示:
CREATE KEYSPACE stackoverflow
WITH replication = {'class': 'NetworkTopologyStrategy', 'MyDC': '3'};
在这种情况下"是",我的数据将同等地复制到每个节点。但是,让我们说我的磁盘空间不足,而且(作为初创公司)我买不起更大的硬盘。在这种情况下,我可能会改变我的键空间,使复制因子为2:
CREATE KEYSPACE stackoverflow
WITH replication = {'class': 'NetworkTopologyStrategy', 'MyDC': '2'};
这样,每个节点只负责我数据的三分之二。当然,这里的缺点是我现在只能在集群中丢失一个节点。
所有其他分布式数据库管理系统都会出现这种情况吗?其他系统会在数据库中平均分配数据吗?
简单地说," no"和"没有。"
如果他们不能平均分配,那么数据如何在这些分布式数据库中分发?
由于有数百个分布式DBMS(包括NoSQL和RDBMS声称是"分布式"以某种方式),我不可能开始总结(甚至一般)他们如何分发他们的数据。但我要说的是,他们中的一些人利用了#" shard key"和/或"辅助节点"实现分配和扩展。
在Cassandra中,所有节点都是相同的...没有主节点的概念。"但是有些系统有一个" primary"或者"掌握"节点,以及" secondary"节点。在这些方案中,主服务器处理所有写操作,并将数据复制到一个或多个辅助服务器。使用分片键,将为每个节点分配特定范围的分片值。然后,数据仅存储在负责数据分片键所属范围的节点上。