如何将数据存储在靠近 Cassandra 用户位置的服务器上?

How store data on servers close to the users location in Cassandra?

我目前正在考虑使用 Cassandra 处理全球客户的最佳方式。我假设我在美国和欧洲有服务器。是否有一种机制可以影响数据存储在哪些服务器上?对于美国用户,数据应托管在美国服务器上,在欧洲只有一个安全副本。总的来说,我想到的是可以识别为某个位置的 UUID。例如,如果设置了最后一位,则它应该位于美国的服务器上,否则位于欧洲。然后我在想auf写一个自定义的Partitioner,给美国服务器范围内的值赋值。例如,如果它以 00-7f 开头是欧洲,而 80-ff 是在美国。所以我可以使用普通的 Murmur3,它根据 UUID 中的位置信息设置第一位。我可以影响某个服务器的分区范围吗?我认为,尤其是对于虚拟节点,这可能会变得复杂。有没有办法实现所需的基于服务器位置的分区选择?你会如何尝试解决这个问题?

现在,您需要为每个区域设置不同的键空间。完成后,您可以将复制策略设置为 NetworkTopologyStrategy,然后使用 NTS 设置复制因子以匹配您对数据局部性的期望。

有一个悬而未决的问题 (CASSANDRA-7306) 建议增加以您描述的方式控制局部性的机会。目前,没有迹象表明它即将开始工作,也没有迹象表明它将在不久的将来实现,因此实现它的实际方法是 NetworkTopologyStrategy 并适当配置复制因子。