当使用RandomPartioner和Hector作为客户端时,如何从cassandra中获取已排序的行?

时间:2011-11-07 14:48:05

标签: sorting cassandra hector

为了提高我对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。

提前致谢。

1 个答案:

答案 0 :(得分:6)

在使用RandomPartitioner时,我认为没有一种完全简单的方法可以做到这一点。

每行中的列自动按排序顺序存储,因此您可以将每条消息存储为一列,以时间戳为基础。

很快,当然,你的行会变大。因此,您需要将消息分成行(按天,小时或分钟等),您的客户需要确定要访问的行(时间段)。

另见Cassandra time series datahttp://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/