【问题标题】:How to compare contents of two cassandra keyspaces如何比较两个 cassandra 键空间的内容
【发布时间】:2017-09-24 22:26:55
【问题描述】:

我的 Cassandra 集群中有两个键空间,其中第二个已创建为第一个(使用 sstableloader)的副本(架构和数据)。

如何比较(检查)来自第一个键空间的所有数据是否也以有效的方式存储在第二个键空间中?

备注(疑问):

  1. 这些键空间中有大量数据,因此我希望避免从两个键空间扫描所有行并进行比较。
  2. 我能以某种方式比较 sstable 文件 (*Data.db) 吗?键空间具有完全相同的结构,所以 *Data.db 文件可能应该相同(或几乎相同)?
  3. 也许还有另一种有效的方法?

【问题讨论】:

    标签: cassandra cassandra-2.1


    【解决方案1】:

    除了比较每个键存在于另一个中之外,您想避免这种方法实际上并没有其他方法。数据文件不会相同,因为刷新和压缩不会总是将完全相同的分区键写入相同的文件。

    您可以使用nodetool cfstats 来比较估计的密钥数量,但这只会给您一个指示

    话虽如此,通过分区键查询表是一个非常快速的操作,因此对于以col1 为键的给定表,SELECT col1 from MYTABLE where col1=<key to check> 应该运行得非常快。如果您使用其中一种驱动程序,您可以利用分页功能将结果集限制为可管理的块。

    正如python driver 的示例所说,您可以执行类似的操作(请注意,我尚未对此进行测试!)

    from cassandra.query import SimpleStatement
    query1 = "SELECT key FROM keyspace1.table1"
    statement1 = SimpleStatement(query1, fetch_size=1000)
    for row1 in session.execute(statement1):
        # search second table here
    

    它有点递归,您可以调整一些驱动程序设置以提高效率,但我只是想展示驱动程序如何以这种方式进行分页。

    希望对你有帮助

    【讨论】:

    • 但是文件中的行是根据聚类键排序的。所以,假设我已经刷新和压缩了所有数据,数据文件应该几乎相同,对吧?也许有办法只检查文件的相关部分?
    • @pWoz 你可以试试,但它不是我见过的。您需要使用sstable2json(早期版本)或sstabledump(后期发布3.0 版本)解码文件。这些文件也不一定具有相同的名称
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 2020-01-07
    相关资源
    最近更新 更多