我刚开始研究卡桑德拉。
这是一个表和查询。
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获取新数据非常必要。
谢谢。
答案 0 :(得分:2)
您不能对分区键进行排序,只能对单个分区内的群集列进行排序。因此,您需要相应地对数据建模。但是您需要非常小心,不要创建很大的分区(例如,使用ticker_id
作为分区键时)。在这种情况下,您可能需要创建一个组合键,例如ticker_id
+年或月,具体取决于您插入数据的频率。
关于每个代码表,这不是一个好主意,因为每个表都有开销,这将导致资源消耗增加。 200张桌子已经是高数目了,而500张几乎是“硬限制”