例如:在一天中,我在表格中加载了10条记录,我希望表格中有前三条最新记录,其他每条记录都应删除
答案 0 :(得分:1)
为什么不设计它像
CREATE IF NOT EXISTS keyspace_name.table_name (
key text,
year_month_day text,
time timeuuid,
record blob,
PRIMARY KEY ((key, year_month_day), time)
) WITH CLUSTERING ORDER BY (time DESC);
在一天结束时
SELECT * FROM keyspace_name.table_name LIMIT 3;`
然后删除其余的
DELETE FROM keyspace_name.table_name WHERE key = 'something' AND year_month_day = '2017-05-05' AND time > lasttimefromselect`
或者如果您更愿意在插页上工作而不需要找回工作并清理它...请记住这是慢的但如果只做10就不会任何争论。你可以只有一个正在运行的计数器并将其调整为3,以便在它超过3时写入最旧的计数器。然后就不会有必要的删除。
CREATE IF NOT EXISTS keyspace_name.table_name (
key text,
ymd text,
offset int STATIC,
bucket int,
record blob,
PRIMARY KEY ((key, ymd), bucket)
) WITH COMPACTION = { 'class' : 'LeveledCompactionStrategy' };
然后执行读取和CAS更新
SELECT * FROM keyspace_name.table_name WHERE key='key' AND ymd='yyyy-mm-dd';
BEGIN BATCH
UPDATE table_name SET offset = [retrieved_offset+1] WHERE key = key AND ymd = 'yyyy-mm-dd' IF offset = [retrieved_offset];
UPDATE table_name SET bucket=[retrieved_offset%3], record=[...] WHERE key = key AND ymd = 'yyyy-mm-dd';
APPLY BATCH;
然后将其置于循环中,直到applied
为真。