cassandra long ordering因负long而关闭?还是我做错了?

cassandra long ordering因负long而关闭?还是我做错了?,cassandra,Cassandra,我在卡桑德拉身上看到了以下几个价值观(我意识到,我有意加入各种东西来看看会发生什么)。注意:所有8字节的值都是长的,其他几个是一些字符串。对于正长,甚至UTF8字符串,排序顺序似乎都很好。然而,负长排在列表的最后 RowKey: 6d796f6e655f696e646578 => (column=000000000000000a, value=, timestamp=1343228055671000) => (column=0000000000000014, value=, time

我在卡桑德拉身上看到了以下几个价值观(我意识到,我有意加入各种东西来看看会发生什么)。注意:所有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为什么删除了负列??)

两个问题:

  • 为什么现在缺少负长(我看到的所有其他长都被正确地翻译回来)

  • 我知道如果只有8个字节,你真的需要存储2的补码,所以排序顺序“将”出错,那么人们通常如何处理-50到+50的列片段呢?他们在做两个切片,一个在开始,一个在结束

  • 谢谢,
    Dean

    列的顺序基于列族的比较器。当您告诉cassandra cli采用某种类型时,它只会更改列的显示方式,而不会更改顺序


    尝试使用comparator=LongType创建新的列族。这将按照您期望的顺序(LONG\u MIN..LONG\u MAX)对列进行排序

    列的顺序基于列族的比较器。当您告诉cassandra cli采用某种类型时,它只会更改列的显示方式,而不会更改顺序


    尝试使用comparator=LongType创建新的列族。这将按照您期望的顺序(LONG\u MIN..LONG\u MAX)对列进行排序

    好的,很好的信息,但是当我将它设置为显示long时,为什么它不显示负的long呢?嗯,在这个命令“假设time_索引comparator为long”之后,顺序仍然不正确;也许这是关键的comparator,而不是列名?这个命令是什么?drop/create修复了它,negative现在显示…不知道为什么negative有一次停止显示..这很奇怪。请注意,您的注释
    可能是键比较器
    可能是错误的,因为键(用于“行”)通常不是使用数据内容排序的,而是使用诸如内容MD5之类的散列键。您必须更改默认值以避免这种行为,这是一个群集设置,这意味着它必须在创建群集时进行设置。好的,很好的信息,但是为什么在我将其设置为显示长时它不显示负长?嗯,在这个命令“假定时间为长”之后,顺序仍然不正确也许这是关键的比较器,而不是列名?这个命令是什么?drop/create修复了它,negative现在显示…不知道为什么negative有一次停止显示..这很奇怪。请注意,您的注释
    可能是键比较器
    可能是错误的,因为键(用于“行”)通常不是使用数据内容排序的,而是使用诸如内容MD5之类的散列键。您必须更改默认值以避免该行为,这是一个群集设置,这意味着必须在创建群集时进行设置。
    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)