cassandra长期订购是否有消极的多头?或者我做错了吗?

时间:2012-07-25 15:19:14

标签: cassandra

我在cassandra中看到以下几个值(意识到,我正在考虑各种各样的东西,看看会发生什么)。注意:所有8字节值都是长的,其他几个是一些字符串。排序顺序似乎适用于正数多头,甚至UTF8字符串也是如此。负的多头位于列表的最后但是!!!!

RowKey: 6d796f6e655f696e646578
=> (column=000000000000000a, value=, timestamp=1343228055671000)
=> (column=0000000000000014, value=, timestamp=1343228055671000)
=> (column=0000000000000028, value=, timestamp=1343228055671000)
=> (column=000000000000003c, value=, timestamp=1343228055671000)
=> (column=00000000000000c8, value=, timestamp=1343228055671000)
=> (column=0000000000000154, value=, timestamp=1343228055671000)
=> (column=00000000000001f4, value=, timestamp=1343228055671000)
=> (column=0000000000000226, value=, timestamp=1343228055671000)
=> (column=00000000000002bc, value=, timestamp=1343228055671000)
=> (column=000000746bb814ee, value=, timestamp=1343228055671000)
=> (column=30303030303030303030, value=, timestamp=1343228055671000)
=> (column=61, value=, timestamp=1343228055671000)
=> (column=617364667364, value=, timestamp=1343228055671000)
=> (column=6565656565, value=, timestamp=1343228055671000)
=> (column=657772776572657772657772, value=, timestamp=1343228055671000)
=> (column=fffffffffffffe0c, value=, timestamp=1343228055671000)
=> (column=ffffffffffffff38, value=, timestamp=1343228055671000)
=> (column=ffffffffffffffd8, value=, timestamp=1343228055671000)

现在,如果我告诉cassandra假设类型为long,那么同一行会出现像缺少一堆列(我真的不知道为什么cassandra删除了负列????)...

RowKey: 6d796f6e655f696e646578
=> (column=10, value=, timestamp=1343228055671000)
=> (column=20, value=, timestamp=1343228055671000)
=> (column=40, value=, timestamp=1343228055671000)
=> (column=60, value=, timestamp=1343228055671000)
=> (column=200, value=, timestamp=1343228055671000)
=> (column=340, value=, timestamp=1343228055671000)
=> (column=500, value=, timestamp=1343228055671000)
=> (column=550, value=, timestamp=1343228055671000)
=> (column=700, value=, timestamp=1343228055671000)
=> (column=500023432430, value=, timestamp=1343228055671000)

两个问题:

  1. 为什么现在缺少负数多头(我看到的所有其他多头都被正确翻译回来)?

  2. 据我所知,如果只有8个字节,你真的需要存储2的补码,所以排序顺序“出错”,所以人们通常如何处理-50到-40的列切片+50呢?他们在做两片,一片在开头,一片在最后?

  3. 感谢, 迪安

1 个答案:

答案 0 :(得分:3)

列的排序基于列族的比较器。当你告诉cassandra-cli假定某种类型时,它只会改变列的显示方式,而不是排序。

尝试使用comparator = LongType创建新的列族。这将按您期望的顺序对列进行排序(LONG_MIN..LONG_MAX)。