为了提高我对Hector和cassandra的技能,我正在尝试使用不同的方法从cassandra中查询数据。
目前我正在尝试制作一个简单的消息系统。我希望按照时间顺序获取发布的消息,最后发布消息。
在普通的sql中,可以使用'order by'。我知道如果你使用OrderPreservingPartitioner是可能的,但是这个分区器已被弃用并且效率低于RandomPartioner。我想在带有时间戳als值的辅助列上创建索引,但我无法弄清楚如何获取数据。我确定我必须使用至少两个查询。
我的专栏系列如下:
create column family messages
with comparator = UTF8Type
and key_validation_class=LongType
and compression_options =
{sstable_compression:SnappyCompressor, chunk_length_kb:64}
and column_metadata = [
{column_name: message, validation_class: UTF8Type}
{column_name: index, validation_class: DateType, index_type: KEYS}
];
我不确定我是否应该使用DataType或long作为索引列,但我认为这对于这个问题并不重要。
那么如何才能对数据进行排序?如果可能的话,我想知道如何完成CQL语法和whitout。
提前致谢。
答案 0 :(得分:6)
在使用RandomPartitioner时,我认为没有一种完全简单的方法可以做到这一点。
每行中的列自动按排序顺序存储,因此您可以将每条消息存储为一列,以时间戳为基础。
很快,当然,你的行会变大。因此,您需要将消息分成行(按天,小时或分钟等),您的客户需要确定要访问的行(时间段)。
另见Cassandra time series data 和http://rubyscale.com/2011/basic-time-series-with-cassandra/ 和https://www.cloudkick.com/blog/2010/mar/02/4_months_with_cassandra/ 和http://pkghosh.wordpress.com/2011/03/02/cassandra-secondary-index-patterns/