【发布时间】:2012-03-05 20:31:09
【问题描述】:
我在 cassandra 中有一个列族,用于存储日常信息。通过每天,我认为它应该每天都被删除。
所以,我想知道,是否可以在 cassandra 中配置对这些数据的清除。
我来这里是因为我在 cassandra 的页面中没有找到任何关于数据清除的更深入的信息。
谢谢!
【问题讨论】:
标签: java database cassandra hector
我在 cassandra 中有一个列族,用于存储日常信息。通过每天,我认为它应该每天都被删除。
所以,我想知道,是否可以在 cassandra 中配置对这些数据的清除。
我来这里是因为我在 cassandra 的页面中没有找到任何关于数据清除的更深入的信息。
谢谢!
【问题讨论】:
标签: java database cassandra hector
还没用过,但是 Cassandra 0.7 有列的 TTL。也许这会对你有所帮助,它基本上会在一段时间后删除列:
【讨论】:
我知道这是一个老问题,但是对于任何想要获得 2.x+ 版本答案的 Google 员工来说,这里是 Determining Time To Live (TTL) 上的 DataStax 文档。将 CQL 与 excelsior 键空间和 clicks 列族一起使用,您可以照常创建表:
CREATE TABLE excelsior.clicks (
userid uuid,
url text,
name text,
PRIMARY KEY (userid, url)
);
插入数据时,指定USING TTL 子句,后跟数据应保留的秒数:
INSERT INTO excelsior.clicks (
userid, url, name)
VALUES (
3715e600-2eb0-11e2-81c1-0800200c9a66,
'http://apache.org',
'Mary')
USING TTL 86400;
请注意,86400 是一天中的秒数。您还可以在 Java CQL 驱动程序中使用prepared statement 设置 TTL,只需将其视为任何其他绑定参数即可:
String strCQL = "INSERT INTO excelsior.clicks (userid, url, name) "
+ "VALUES (?,?,?) USING TTL ? ";
boundStatement = new BoundStatement(statement);
mySession.execute(boundStatement.bind(
UUID.fromString("3715e600-2eb0-11e2-81c1-0800200c9a66"),
"http://apache.org",
"Mary",
86400) );
【讨论】: