我是Cassandra的新手,但我之前已经看过Thrift示例,我可以将列建模为:
id | start_time | end_time | total_value | value + [timeStamp1]
| value + [timeStamp2]...
是否可以使用CQL的单列系列执行此操作?我可以看到我可以创建(id,timestamp)的复合键并将值存储在时间戳中,并作为非规范化的一部分重复每行的事件级元数据,但是仍然会将它存储在一个大行中吗?
答案 0 :(得分:2)
是的,你可以在Cassandra只用一张桌子。这个想法是你有一个分区键(id)和一个集群键(时间戳)。对于相同的分区键,所有数据都写入一个大行......
CREATE TABLE timeseries (id uuid, ts timestamp, info text, otherinfo text, PRIMARY KEY (id, ts));
在此示例中,您可以按时间查询特定ID的所有时间戳事件。
SELECT * FROM timeseries where id=someid and ts > 0 and ts < 100;
对于每个id,您将拥有包含事件的宽行。至于“将事件元数据重复为非规范化”,如果对于相同的id,所有其他信息都不会改变,那么您应该将它们声明为static
,因此,无论您在ROW中有多少事件这些列将只出现一次(这是一个聪明的非规范化)。
HTH, 卡罗