我在DataStax上读过关于Apache的文章,我注意到,无论我们要写什么数据,都将在所有节点中平均分布。在所有其他分布式数据库管理系统中都会出现这种情况吗?其他系统是否会在各自的数据库中平均分配数据?如果它们的分布不相等,那么数据是如何在这些分布式数据库之间分布的呢?
发布于 2015-03-04 13:13:25
我已经注意到,无论我们要写什么数据,都将平等地分布在所有的节点中。
不一定。数据复制的级别由复制因子决定,复制因子是根据每个键空间设置的。假设我有一个由3个节点组成的集群,并且定义我的键空间,如下所示:
CREATE KEYSPACE stackoverflow
WITH replication = {'class': 'NetworkTopologyStrategy', 'MyDC': '3'};在这种情况下,“是”,我的数据将被复制到每个节点。但假设我的磁盘空间快用完了,而且(作为一种启动),我买不起更大的硬盘。在这种情况下,我可以将我的键空间改为复制因子2:
CREATE KEYSPACE stackoverflow
WITH replication = {'class': 'NetworkTopologyStrategy', 'MyDC': '2'};这样,每个节点只负责三分之二的数据。当然,这里的缺点是,我现在只能承受集群中单个节点的损失。
在所有其他分布式数据库管理系统中都会出现这种情况吗?其他系统是否会在各自的数据库中平均分配数据?
简单地说,“不”和“不”。
如果它们的分布不相等,那么数据是如何在这些分布式数据库之间分布的呢?
由于有数百个分布式DBMS(包括声称以某种方式“分发”的NoSQL和RDBMS),我不可能开始总结(甚至一般)它们都是如何分布数据的。但我要说的是,其中有几个使用了“切分密钥”和/或“次要节点”的概念来实现分布和扩展。
在卡桑德拉,所有节点都是equal...there,不是“主节点”的概念。但是有些系统有“主”或“主”节点以及“次要”节点的概念。在这些场景中,主程序处理所有的写操作,并将数据复制到一个或多个次要程序。使用切分键,将碎片值的某一范围分配给每个节点。然后,数据仅存储在负责数据碎片键所属范围的节点上。
https://stackoverflow.com/questions/28851246
复制相似问题