[英]Timestamp in Cassandra
我更喜歡使用時間戳作為Cassandra中的一個列(我決定將其用作聚類鍵)。 這是在Cassandra中將列存儲為時間戳的正確方法?
( 即 )如下所示,直接使用'毫秒'(例如:1513078338560)可以嗎?
INSERT INTO testdata (nodeIp, totalCapacity, physicalUsage, readIOPS, readBW, writeIOPS, writeBW, writeLatency, flashMode, timestamp) VALUES('172.30.56.60',1, 1,1,1,1,1,1,'yes',1513078338560);
或使用dateof(now());
INSERT INTO testdata (nodeIp, totalCapacity, physicalUsage, readIOPS, readBW, writeIOPS, writeBW, writeLatency, flashMode, timestamp) VALUES('172.30.56.60',1, 1,1,1,1,1,1,'yes',dateof(now()));
這是在Cassandra中使用基於時間戳的查詢的更快和推薦的方法嗎?
注意:我在內部知道它存儲為毫秒,我使用'SELECT timestamp, blobAsBigint(timestampAsBlob(timestamp)) FROM'
謝謝,哈利
在Cassandra> = 2.2中不推薦使用dateof
...相反,最好使用函數toTimestamp
,如下所示: toTimestamp(now())
。 選擇時,如果要獲取時間戳,也可以使用toUnixTimestamp
函數:
cqlsh:test> CREATE TABLE test_times (a int, b timestamp, PRIMARY KEY (a,b));
cqlsh:test> INSERT INTO test_times (a,b) VALUES (1, toTimestamp(now()));
cqlsh:test> SELECT toUnixTimestamp(b) FROM test_times;
system.tounixtimestamp(b)
---------------------------
1513086032267
(1 rows)
cqlsh:test> SELECT b FROM test_times;
b
---------------------------------
2017-12-12 13:40:32.267000+0000
(1 rows)
關於性能 - 有不同的考慮因素:
偽代碼看起來如下(類似Java)。
PreparedStatement prepared = session.prepare(
"insert into your_table (field1, field2) values (?, ?)");
while(true) {
session.execute(prepared.bind(value1, value2));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.