Cassandra按Timestemp desc

时间:2018-07-13 10:07:37

标签: cassandra

我刚开始研究卡桑德拉。

这是一个表和查询。

    CREATE TABLE finance.tickdata(
    id_symbol  int, 
    ts         timestamp,
    bid        double,
    ask        double,
    PRIMARY KEY(id_symbol,ts)
);

查询成功,

select ts,ask,bid 
  from finance.tickdata 
 where id_symbol=3 
 order by ts desc;

接下来是表名称,新表脚本中的决策移动id_symbol。

CREATE TABLE IF NOT EXISTS mts_src.ticks_3(
    ts         timestamp PRIMARY KEY,
    bid        double,
    ask        double
);

现在查询失败,

select * from mts_src.ticks_3 order by ts desc

我从文档中读取到,我需要通过主键(分区键)进行使用和过滤(WHERE), 但从技术上讲,我的两个示例都相同。为什么卡桑德拉在这方面受到如此限制?

还有一个问题,总的来说这是个好主意吗?在表名中移动id_symbol- 可能是1000个唯一的id_symbol和每个ID的大量数据。将此数据放在各个表上看起来不错!!但是我可能会失去顺序,这对于我通过每个symbol_id获取新数据非常必要。

谢谢。

1 个答案:

答案 0 :(得分:2)

您不能对分区键进行排序,只能对单个分区内的群集列进行排序。因此,您需要相应地对数据建模。但是您需要非常小心,不要创建很大的分区(例如,使用ticker_id作为分区键时)。在这种情况下,您可能需要创建一个组合键,例如ticker_id +年或月,具体取决于您插入数据的频率。

关于每个代码表,这不是一个好主意,因为每个表都有开销,这将导致资源消耗增加。 200张桌子已经是高数目了,而500张几乎是“硬限制”