2016-04-20 59 views
0

我正在使用datastax和cassandra。我想要在插入15分鐘後自動刪除一行。但行仍然存在。Cassandra TTL不工作

我的代碼是下面:

Insert insertStatement = QueryBuilder.insertInto(keySpace, "device_activity"); 
     insertStatement.using(QueryBuilder.ttl(15* 60)); 
     insertStatement.value("device", UUID.fromString(persistData.getSourceId())); 
     insertStatement.value("lastupdatedtime", persistData.getLastUpdatedTime()); 
     insertStatement.value("devicename", persistData.getDeviceName()); 
     insertStatement.value("datasourcename", persistData.getDatasourceName()); 

該表由4個列組成:設備(UUID),的datasourcename(文本),設備名(文本),lastupdatedtime(時間戳)。

如果我查詢某個字段的TTL,它顯示我4126秒這是錯誤的。 //從device_activity選擇TTL(devicename); //給我4126秒

+0

最後正在執行的查詢是INSERT INTO devicecloud_test.device_activity(設備,lastupdatedtime,設備名,的datasourcename)VALUES(ca5cff1f-B23A -426a-ba3f-f13300a2d8e6,1461150305100,'TestBench162','259642460471175')使用TTL 60; – Renukaradhya

+0

我不明白,Cassandra使用的TTL是4126還是60秒? – doanduyhai

+0

我給了900秒,但cassandra顯示我4126秒 – Renukaradhya

回答

0

在下面的鏈接中,提供了對TTL的解釋。 。

https://docs.datastax.com/en/cql/3.1/cql/cql_using/use_expire_c.html

「TTL數據具有一秒的精度,因爲在服務器上計算。因此,一個非常小的TTL可能並沒有多大意義。此外,在服務器上的時鐘應同步;否則可以觀察到降低的精確度,因爲在接收初始插入的主要主機上計算到期時間,然後由羣集中的其他主機解釋。「

在閱讀完之後我可以由對應的節點上設置適當的時間解決(機器)