Cassandra CLI:带有RandomPartitioner的RowKey =以明文形式显示密钥?

时间:2011-08-02 13:09:15

标签: nosql cassandra hector

使用Cassandra CLI为我提供了以下输出:

RowKey: 31307c32333239
=> (super_column=3f18d800-fed5-17cf-b91a-0016e6df0376,
     (column=date, value=1312289229287, timestamp=1312289229647000)

我正在使用RandomPartitioner。以某种方式可以在Cleartext中获取RowKey(来自CLI)吗?理想情况下,在CLI中,如果有一个Helper类将其转换回String,这也可以。

我知道钥匙是以某种方式散播的。如果密钥不能被“检索”(我必须假设),Cassandra中是否有暴露的辅助类,我可以使用它来生成基于我的原始字符串的Key来比较它们吗?

我的问题:我在Cassandra中存储了记录,但使用像"user1|order1"这样的密钥我无法检索记录。卡桑德拉没有找到任何记录。我假设我的钥匙错了,我需要比较它们,找出问题所在......

非常感谢!!延

2 个答案:

答案 0 :(得分:1)

这个问题非常重要:Cassandra cli: Convert hex values into a human-readable format

唯一的区别是在Cassandra 0.8中,每个列族现在有一个“key_validation_class”属性,默认为BytesType。当CLI看到它是BytesType时,它表示十六进制的密钥。

答案 1 :(得分:0)

Cassandra将您的RowKey视为十六进制字节:十六进制为31 30 7c 32 33 32 39 ASCII中的10|2329,我想这是你的关键。

如果要在CLI中查看明文密钥,则需要提供命令assume MyColumnFamily keys as ascii;,这将使CLI在行键中自动转换为ASCII和十六进制。

或者,在创建列族时,使用create column family MyColumnFamily with key_validation_class = AsciiType;将永久设置首选项。

散列发生在较低级别,不会影响您的问题。