1

我在 DataStax 中阅读了有关 Apache Cassandra 的文章,我注意到无论我们要写入的数据都将平均分布在所有节点之间。在所有其他分布式数据库管理系统中都会出现这种情况吗?其他系统会在它们的数据库中平均分配数据吗?如果它们分布不均,那么数据如何在这些分布式数据库中分布?

4

1 回答 1

3

我注意到,无论我们要写入什么数据,都将平均分配给所有节点。

不必要。您拥有的数据重复级别由您的复制因子决定,该因子是基于每个键空间设置的。假设我有一个由 3 个节点组成的集群,我像这样定义我的密钥空间:

CREATE KEYSPACE stackoverflow
WITH replication = {'class': 'NetworkTopologyStrategy', 'MyDC': '3'};

在这种情况下“是”,我的数据将被平等地复制到每个节点。但是假设我的磁盘空间快用完了,而且(作为一个初创公司)我买不起更大的硬盘驱动器。在这种情况下,我可以将我的键空间更改为复制因子为 2:

CREATE KEYSPACE stackoverflow
WITH replication = {'class': 'NetworkTopologyStrategy', 'MyDC': '2'};

这样,每个节点只负责我三分之二的数据。当然,这里的缺点是我现在只能遭受集群中单个节点的丢失。

在所有其他分布式数据库管理系统中都会出现这种情况吗?其他系统会在它们的数据库中平均分配数据吗?

简单地说,“不”和“不”。

如果它们分布不均,那么数据如何在这些分布式数据库中分布?

由于那里有数百个分布式 DBMS(包括声称以某种方式“分布式”的 NoSQL 和 RDBMS),我不可能开始总结(甚至一般地)它们是如何分布数据的。但我要说的是,其中一些利用“片键”和/或“辅助节点”的概念来实现分布和规模化。

在 Cassandra 中,所有节点都是平等的……没有“主节点”的概念。但是有些系统具有“主”或“主”节点以及“辅助”节点的概念。在这些场景中,主节点处理所有的写入操作,并将数据复制到一个或多个从节点。使用分片键,为每个节点分配一定范围的分片值。然后,数据仅存储在负责数据分片键所在范围的节点上。

于 2015-03-04T13:13:25.000 回答