RussS 的回答也是正确的,我认为这很难理解。
与其说是代币分配,不如说是代币分配,因为这是 Cassandra 用于分布式数据访问概念的技术手段。
重要的是复制因子和环以了解其意义。
复制的工作方式是在接下来的两个节点上复制一个节点的数据。因此,如果您在节点 A 上,分配给 A 的数据会复制到 B 和 C。分配给 B 的数据会复制到 C 和 D,依此类推。
如果您只有 3 个节点和 3 个副本,则没有任何区别。
如果您有 100 个节点,复制 3 和num_tokens: 1
,那么恰好有 3 个节点复制分配给它们的数据,并且这始终是节点的整个数据集。在上面的示例中,这意味着分配给 A 的所有数据都可以从 A、B 或 C 读取,并且只能从这三个节点读取。因此,如果您尝试经常加载特定数据而其余部分不经常加载,那么您的集群将相当不平衡。
使用 v-nodes,数据被分解为子分区。一台计算机代表许多虚拟节点。所以旧计算机 A 现在可以代表 A、D、G、J、M 假设 a num_tokens: 5
。
接下来我们有戒指。构建环时,计算机将相互连接,使得同一台计算机不会连接到自身(A 不会直接与 D 对话,反之亦然。)
现在,这意味着一台物理计算机将连接到num_tokens
×replication_factor - 1
其他计算机。因此,num_tokens
设置为 5 和复制 3,您将连接到其他 10 台计算机。这意味着负载将在 10 台计算机而不是 3 台计算机之间共享(因为复制因子会暗示。)
因此,对于 16 个节点 anum_tokens: 256
和replication: 3
,这将是一个奇怪的设置,因为这意味着所有节点彼此之间连接了 512 次。话虽如此,必须更改num_tokens
后者可能需要一些时间让集群适应新值。特别是如果您有大型安装。因此,如果您预见到有大量节点,那么num_tokens
从一开始就相当大是一个好主意。
作为副作用,它还将在每个节点上的各种表(文件)之间分发数据。这也有助于更快地查找数据。实际上,建议您在创建 Elassandra 集群时使用更多的实例(16 到 64 个)以简化搜索。