2

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

提前致谢。

4

1 回答 1

6

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

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

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

另请参阅Cassandra 时间序列数据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/

于 2011-11-07T16:16:49.327 回答