【问题标题】:Placing data in specific nodes in Cassandra在 Cassandra 的特定节点中放置数据
【发布时间】:2014-07-09 22:01:22
【问题描述】:

在 Cassandra 中,我们能否“修复”特定分区键所在的节点以优化提取?

这是针对特定键空间和表的优化,其中一个数据中心写入的数据永远不会被另一个数据中心上的客户端读取。如果仅在特定的数据中心查询特定的分区键,是否可以通过将其“固定”到写入它的同一数据中心的节点来避免网络延迟?

换句话说,这是一个架构在所有数据中心中通用的用例,但从不跨数据中心访问数据。这样做的一种方法是将数据中心 id 作为分区键。但是,特定数据中心的数据需要/不应该放在其他数据中心。我们可以通过以某种方式指定 cassandra 分区键到数据中心映射来进行优化吗?

自定义分区器是这种用例的解决方案吗?

【问题讨论】:

    标签: cassandra cql3 cassandra-2.0


    【解决方案1】:

    您应该能够使用 Cassandra 的“数据中心感知”来解决这个问题。您将无法让它在行级别强制执行该意识,但您可以在键空间级别执行此操作。因此,如果您知道某些键空间只能由某些地方访问(并由特定数据中心提供服务),您可以配置您的键空间以进行相应的复制。

    cassandra-topology.properties file 中,您可以定义哪些节点位于哪个机架和数据中心。然后,确保您使用了一个将尊重拓扑条目(例如:propertyFileSnitch)的告密者(在您的cassandra.yaml 中)。

    然后,当您创建密钥空间时,您可以在每个数据中心的基础上定义复制因子:

    CREATE KEYSPACE "Excalibur"
      WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'dc1' : 3, 'dc2' : 2};
    

    要让您的客户端应用程序仅访问某些数据中心,您可以指定 LOCAL read consistency(例如:LOCAL_ONELOCAL_QUORUM)。这样,您在一个区域中的客户端应用程序将仅从特定数据中心读取。

    特定数据中心的数据需要/不应放在其他数据中 中心。

    虽然此解决方案无法解决您的这部分问题,但除非您有磁盘空间问题(在当今时代,您不应该),否则拥有额外的数据副本可以在紧急情况下为您解救。如果您应该丢失特定数据中心中的一个或所有节点并且必须重建它们,则集群范围的修复将恢复您的数据。否则,如果保持数据分离真的很重要,您可能需要考虑将数据中心拆分为单独的集群。

    【讨论】:

      【解决方案2】:

      Cassandra 使用 partioner 策略确定在哪个节点存储行。通常你使用一个分区器,比如 Murmur3 分区器,它可以有效地随机分布行,从而均匀地分布。您可以使用 Java 编写和使用自己的分区程序。也就是说,您应该谨慎执行此操作。你真的想要将一行分配给一个特定的节点。

      【讨论】:

        【解决方案3】:

        数据量太大,无法跨所有数据中心复制。因此,我求助于为每个数据中心创建一个密钥空间。

        CREATE KEYSPACE "MyLocalData_dc1"
        WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'dc1' : 3, 'dc2' : 1, dc3:0, dc4: 0};
        
        CREATE KEYSPACE "MyLocalData_dc2"
        WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'dc1' : 0, 'dc2' : 3, dc3:1, dc4: 0};
        

        这样,数据中心 1 生成的 MyLocalData 在数据中心 2 中有一个备份。数据中心 2 生成的数据在数据中心 3 中备份。数据在写入和访问的数据中心“固定”。避免了网络延迟。

        【讨论】:

          猜你喜欢
          • 2014-02-01
          • 2014-12-12
          • 2018-09-29
          • 2014-05-13
          • 1970-01-01
          • 2018-09-22
          • 2018-01-07
          • 1970-01-01
          • 2018-07-22
          相关资源
          最近更新 更多