我正在尝试存储&以下列方式检索cassandra中的数据:
存储数据 我用以下方式创建了表:
CREATE TABLE mydata (
myKey TEXT,
datetime TIMESTAMP,
value TEXT,
PRIMARY KEY (myKey,datetime)
);
我将在过去5年中每分钟存储一个值。因此它每行存储1440 * 365 * 5 = 2628000条记录/列(myKey作为行键)。
INSERT INTO mydata(myKey, datetime, value) VALUES ('1234ABCD','2013-04-03 07:01:00','72F');
INSERT INTO mydata(myKey, datetime, value) VALUES ('1234ABCD','2013-04-03 07:02:00','72F');
INSERT INTO mydata(myKey, datetime, value) VALUES ('1234ABCD','2013-04-03 07:03:00','72F');
.................
我能够存储数据并且一切正常。但是,我想知道,如果这是水平进行(存储)数据的有效方式(对于100万个这样的密钥,每个密钥有2628000个值)?
检索数据
以上述格式存储数据后,我可以通过使用一段时间的简单选择查询来选择数据。 例如:
SELECT *
FROM mydata
WHERE myKey='1234ABCD' AND datetime > '2013-04-03 07:01:00' AND datetime < '2013-04-03 07:04:00';
查询工作正常,我得到了预期的结果。
但我的问题是:
感谢任何其他建议。
答案 0 :(得分:2)
不,它不对,将来你会遇到问题,因为每行密钥我们只能存储20亿条记录或列。之后它不会给出错误,但它也会存储数据。 对于您的问题,将列时间戳拆分为年,月,日和时间。 喜欢2016年,04年,04年和15点03:00。也可以按年,月,日分区键。
答案 1 :(得分:0)
您肯定需要使用模块化版本的时间戳来绑定分区。但粒度确实取决于你的读数。
如果你主要是每天阅读,那就用这样的PK((myKey,yyyymmdd),时间)
如果主要是周PK((mykey,yyyyww),时间)或月......
问题是,如果你想读一整年的价值,那么你最好每周或每月都有一个分区,或者甚至一年我认为如果你不做任何删除,你的分区大小需要小于100MB