如果我想按时间窗口划分主键(为了存储和检索效率),使用时间的文本表示或截断的本机时间戳会更好吗
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条答案
按热度按时间v1uwarro1#
我会使用unix时间(即1234567890)来表示这两种格式中的任何一种—要表示一整天,只需使用00:00的时间戳。
不过,我非常推荐在datastax dev博客上阅读cassandra的高级时间序列。它涵盖了一些重要的事情,以考虑在您的模型,关于扣/分裂。
bqucvtff2#
关于您的列键“log\u timestamp”:如果您使用多个写客户机-我建议,否则您可能无法接近c*这样的分布式写优化数据库中可能的吞吐量-您应该考虑使用timeuuids而不是timestamp,因为它们是无冲突的(假设mac地址是唯一的)。否则您必须保证没有两个插入同时发生,否则您将丢失这些数据。您可以对timeuuid和其他基于时间的操作执行列切片查询。