我正在努力解决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条件中传递分区键,因为它的开销会为我记住该值。请建议我解决方案。
答案 0 :(得分:4)
我担心你会在此永远挣扎。
根据评论,您无法决定订单"外部"分区,除非你真的通过更改partitioner来了解你正在做的事情。
请仔细阅读suggested链接,并在this和this 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。