Cassandra数据顺序无需传递条件

时间:2016-11-17 08:42:44

标签: cassandra

我正在努力解决Cassandra数据的数据顺序问题。我有这样一张桌子

tbl_data
 - yymmddhh (text)
 - data (text)

分手键是' yymmddhh '

我正在添加这样的数据

'16-11-17-01', 'a'
'16-11-17-01', 'b'
'16-11-17-02', 'c'
'16-11-17-03', 'xyz'
'16-11-17-03', 'e'
'16-11-17-03', 'f'
  

从tbl_data limit 10中选择*;

我期待按照添加数据的顺序输入数据。但是它提供了这样的数据

'16-11-17-03', 'f'
'16-11-17-03', 'e'
'16-11-17-01', 'a'

即。最新记录第一或一些随机顺序。我需要的数据与我添加的顺序相同。在我的情况下,我无法弄清楚数据的默认顺序。另外我不想在where条件中传递分区键,因为它的开销会为我记住该值。请建议我解决方案。

1 个答案:

答案 0 :(得分:4)

我担心你会在此永远挣扎。

根据评论,您无法决定订单"外部"分区,除非你真的通过更改partitioner来了解你正在做的事情。

请仔细阅读suggested链接,并在thisthis SO回答,了解您为何以此特定顺序获取记录(是的,已订购。 ..)。

然而,一种可能的解决方案是添加timestamp群集密钥,并将分区密钥更改为更简单的" yymmdd":

tbl_data
 - yymmdd (timestamp)
 - hhmmssMMM (timestamp)
 - data (text)

现在您可以逐日存储数据(即您需要知道查询数据的那一天),以及每个分区内的数据顺序(即每天都按timestamp列排序,因此根据您的要求,您可以存储记录的插入时间

现在,如果您不是每天都插入数据,那么您确实需要将插入日期跟踪到另一个(非常简单的)表中:

CREATE TABLE inserted_days (
    yymmdd timestamp PRIMARY KEY
);

发布

SELECT * FROM inserted_days

将扫描所有这个分区,以随机顺序返回记录(从你的应用程序的角度来看,所以你需要对它进行排序),但是在这里我们讨论的是一年中的365条记录,你不需要的东西担心。它很容易做到,而且你不会承受无法控制的管理费用。

HTH。