在 Cassandra 中,我们能否“修复”特定分区键所在的节点以优化提取?
这是针对特定键空间和表的优化,其中一个数据中心写入的数据永远不会被不同数据中心上的客户端读取。如果仅在特定数据中心查询特定分区键,是否可以通过将其“固定”到写入它的同一数据中心的节点来避免网络延迟?
换句话说,这是一个用例,其中模式在所有数据中心都是通用的,但数据永远不会跨数据中心访问。一种方法是将数据中心 ID 作为分区键。但是,特定数据中心的数据需要/不应该放在其他数据中心。我们可以通过某种方式指定 cassandra 到数据中心映射的分区键来进行优化吗?
自定义分区器是这种用例的解决方案吗?
最佳答案
您应该能够使用 Cassandra 的“数据中心感知”来解决这个问题。您将无法让它在行级别强制执行该意识,但您可以在键空间级别执行此操作。因此,如果您知道某些键空间只能由某些地方访问(并由特定数据中心提供服务),您可以配置您的键空间以进行相应的复制。
在cassandra-topology.properties file您可以定义您的哪些节点位于哪个机架和数据中心。然后,确保您正在使用符合拓扑条目(例如:propertyFileSnitch)的告密者(在您的 cassandra.yaml
中)。
然后当您创建 key 空间时,您可以在每个数据中心的基础上定义复制因子:
CREATE KEYSPACE "Excalibur"
WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'dc1' : 3, 'dc2' : 2};
要让您的客户端应用程序仅访问某些数据中心,您可以指定一个LOCAL
read consistency (例如:LOCAL_ONE
或 LOCAL_QUORUM
)。这样,您在一个区域中的客户端应用程序将仅从特定数据中心读取数据。
a specific data center's data need/should not be placed in other data centers.
虽然此解决方案无法解决您的这部分问题,但除非您有磁盘空间问题(在当今时代,您不应该担心),否则拥有额外的数据副本可以在紧急情况下拯救您。如果您丢失了特定数据中心中的一个或所有节点并且必须重建它们,则集群范围的修复将恢复您的数据。否则,如果保持数据分离真的那么重要,您可能需要考虑将数据中心拆分为单独的集群。
关于cassandra - 将数据放置在 Cassandra 的特定节点中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24664464/