簡體   English   中英

卡桑德拉的時間戳

[英]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)

關於性能 - 有不同的考慮因素:

  1. 如果您已將時間戳記作為數字,則可以使用它而不是調用函數
  2. 最好使用預准備語句而不是“原始插入” - 在這種情況下,Cassandra不需要傳輸完整查詢,只需要傳輸數據,也不需要每次都解析語句。

偽代碼看起來如下(類似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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM