Cassandra Compound主键CQL3

时间:2013-05-23 09:11:10

标签: cassandra cql3

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

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));

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

但是,我非常推荐在DataStax开发博客上阅读Advanced Time Series with Cassandra。它涵盖了模型中需要考虑的一些重要事项,包括分组/拆分。