显然,当处理与某些自然分区键(如传感器id)相关的时间序列数据时,它可以用作主键。但是,如果我们对全局视图感兴趣,并且分区键没有自然的候选项,该怎么办呢?如果我们对模式进行如下建模:
CREATE TABLE my_data(
year smallint,
day smallint,
date timestamp,
value text
PRIMARY KEY ((year, day), timestamp)
) WITH CLUSTERING ORDER BY (date DESC);
它(可能)在大多数情况下都能很好地工作,但考虑到我们知道什么年和什么天去拿。
如果我们不在乎今天是哪一天,但我们希望看到前50个最新的项目?如果我们想看下50个项目呢?在Cassandra有办法吗?推荐的方法是什么?
1条答案
按热度按时间chy5wohz1#
保留一张一年/一天的第二张表。当阅读可以从中抢占先机。当添加到我的\u数据时,也会更新它,但要保留插入天数的缓存,以便每个应用程序每天只尝试插入一次。例如,添加额外的键,使每个时间序列可以有多个流而不仅仅是一个表:
对于插入:
然后在内存中的某个地方保存一个密钥/年份/数据集,这样就不需要每次都插入它。阅读最近的:
驱动程序返回迭代器,对其中的每个元素进行查询,直到达到50条记录。
如果插入次数足够频繁,则可以从“今天”开始向后工作,发出查询,直到得到50个事件。如果数据稀疏,那么可能会浪费大量的读取,而另一个表工作得更好。