3

如果我想按时间窗口对主键进行分区,使用时间的文本表示或截断的本机时间戳会更好(为了存储和检索效率),即

CREATE TABLE user_data (
user_id TEXT,
log_day TEXT, -- store as 'yyyymmdd' string
log_timestamp TIMESTAMP,
data_item TEXT,
PRIMARY KEY ((user_id, log_day), log_timestamp));

或者

CREATE TABLE user_data (
user_id TEXT,
log_day TIMESTAMP, -- store as (timestamp-in-milli - (timestamp-in-mills mod 86400)
log_timestamp TIMESTAMP,
data_item TEXT,
PRIMARY KEY ((user_id, log_day), log_timestamp));
4

2 回答 2

1

关于您的列键“log_timestamp”:如果您正在使用多个写入客户端 - 我建议这样做,否则您可能无法接近分布式写入优化数据库(如 C*)中的可能吞吐量 - 您应该考虑使用TimeUUID而不是时间戳,因为它们是无冲突的(假设 MAC 地址是唯一的)。否则,您必须保证不会同时发生两次插入,否则您将丢失此数据。您可以对 TimeUUID 和其他基于时间的操作进行列切片查询。

于 2013-07-05T07:46:55.770 回答
0

我会在其中任何一种格式上使用unix 时间(即1234567890) - 指向一整天,您只需使用 00:00 的时间戳。

但是,我非常推荐阅读DataStax 开发博客上的使用 Cassandra 的高级时间序列。它涵盖了模型中需要考虑的一些重要事项,涉及分桶/拆分。

于 2013-05-23T12:32:09.423 回答