作为Cassandra的新手,我有一个CQL设计问题。我想重用在使用RDBMS系统之前建立的概念,以创建customerData的历史记录。客户本人只会看到最新版本,因此应该是最快的版本,但是可以查询整个历史记录。
我建议的实体属性:
customerId文本, validFromDate日期, validUntilDate日期, customerData文字
结果:
我的猜测是PARTITION_KEY = customerId,而CLUSTER_KEY可以是validFromDate。或使用PRIMARY KEY = customerId。或者,我可以创建两个表,一个用于快速查询最新版本(无历史记录),另一个用于历史分析。
您如何以CQL方式设计它?我想我在想太多RDBMish。
答案 0 :(得分:1)
使用更改时间戳作为按DESC顺序排列的CLUSTERING KEY,例如
CREATE TABLE customer_data_versions (
id text,
change_time timestamp,
name text,
PRIMARY KEY (id, change_time)
) WITH CLUSTERING ORDER BY ( change_time DESC );
它将允许您按降序存储每个客户ID的数据版本。
为同一个ID插入两个版本:
INSERT INTO customer_data_versions (id, change_time, name) VALUES ('id1', totimestamp(now()),'John');
INSERT INTO customer_data_versions (id, change_time, name) VALUES ('id1', totimestamp(now()),'John Doe');
获取上次保存的版本:
SELECT * FROM customer_data_versions WHERE id='id1' LIMIT 1;
获取ID的所有版本:
SELECT * FROM customer_data_versions WHERE id='id1';
获取日期之间的版本:
SELECT * FROM customer_data_versions WHERE id='id1' AND change_time <= before_date AND change_time >= after_date;
请注意,有some limits for partition size(每个客户ID可以存储多少版本):
一个分区中的单元:〜20亿(231);单列值大小:2 GB(建议1 MB)