2016-04-20 13 views
0

私はcassandraでdatastaxを使用しています。行が挿入されてから15分後に自動的に削除されるようにしたい。しかし、行はまだ残っています。カサンドラTTLが動作しない

私のコードは、以下である:デバイス(UUID)、datasourcenameに(テキスト)、DEVICENAME(テキスト)、lastupdatedtime(タイムスタンプ):

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列から成ります。

私はいくつかのフィールドのTTLを照会すると、私には間違っている4126秒が表示されます。 // device_activityからTTL(デバイス名)を選択します。 // 4126秒を返します

+0

最終的に実行されるクエリはdevicecloud_test.device_activity(デバイス、lastupdatedtime、DEVICENAME、datasourcenameに)VALUES(ca5cff1f-b23a。INSERT INTOであります-426a-ba3f-f13300a2d8e6,1461150305100、 'TestBench162'、 '259642460471175')USING TTL 60; – Renukaradhya

+0

カサンドラが使用している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は、おそらくあまり意味がない。また、サーバのクロックが同期されるべきである。そうでなければ有効期限が最初の挿入を受け取ったプライマリホストで計算されますが、クラスタ上の他のホストによって解釈されるため、精度が低下することがあります。

これを読んだ後、私は、対応するノードに適切な時間を設定することにより解決することができた(機械)