如何比较两个cassandra键空间的内容

时间:2017-04-27 08:26:10

标签: cassandra cassandra-2.1

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

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

备注(疑惑):

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

1 个答案:

答案 0 :(得分:0)

除了比较你想要避免的另一个中存在的每个键之外,还有另外一种方法。数据文件不会相同,因为刷新和压缩不会总是将完全相同的分区键写入相同的文件。

您可以使用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

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

希望这有帮助