Cassandra复合主键cql3

im9ewurl  于 2021-06-15  发布在  Cassandra
关注(0)|答案(2)|浏览(482)

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

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

v1uwarro1#

我会使用unix时间(即1234567890)来表示这两种格式中的任何一种—要表示一整天,只需使用00:00的时间戳。
不过,我非常推荐在datastax dev博客上阅读cassandra的高级时间序列。它涵盖了一些重要的事情,以考虑在您的模型,关于扣/分裂。

bqucvtff

bqucvtff2#

关于您的列键“log\u timestamp”:如果您使用多个写客户机-我建议,否则您可能无法接近c*这样的分布式写优化数据库中可能的吞吐量-您应该考虑使用timeuuids而不是timestamp,因为它们是无冲突的(假设mac地址是唯一的)。否则您必须保证没有两个插入同时发生,否则您将丢失这些数据。您可以对timeuuid和其他基于时间的操作执行列切片查询。

相关问题