【问题标题】:How to retrieve a very big cassandra table and delete some unuse data from it?如何检索一个非常大的 cassandra 表并从中删除一些未使用的数据?
【发布时间】:2015-09-09 02:04:23
【问题描述】:

我创建了一个包含 2000 万条记录的 cassandra 表。现在我想删除由一个非主键列决定的过期数据。但它不支持对列的操作。所以我尝试检索表并逐行获取数据以删除数据。不幸的是,它太大而无法检索。否则,我无法删除整个表,我怎么能达到我的目的?

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    你的问题其实是,如何从表中批量获取数据(也叫分页)。

    您可以通过从主键中选择不同的切片来做到这一点:例如,如果您的主键是某种 ID,则每次选择一个 ID 范围,处理结果并做任何您想做的事情,然后获取下一个范围,依此类推。

    另一种方法是使用 fetch_size,具体取决于您使用的驱动程序。您可以看到 Python 示例 here 和 Java 示例 here

    【讨论】:

    • 感谢您的帮助。但这对我真的不起作用。我的桌子有些复杂。主键是 (a,b,c,d),a 是 varchar,b 是 Long,c 是 varchar,d 是 Long。现在我可以使用如下查询语言在 cqlsh 中对其进行分页:SELECT * FROM usertoken WHERE token(a)>=token('avalue') AND (b,c,d)>=(bvalue,'cvalue',dvalue) LIMIT 1000 ALLOW FILTERING;值avalue,bvalue,cvalue,dvalue 代表上一页的最后一条记录。但是当我在 spring-data-cassandra 中使用它时,它每页只返回 100 条记录。 .会发生什么?
    • 好像spring确实支持分页,可以解释一下。有关 spring-data 的 cassandra 分页类,请参见 here
    • 也许我被这个引用误导了。现在我已经直接通过 cassandra-driver 获取了数据,但问题是如何将上述行转换为我的 java 类(String a,Long b,String c,Long d)。有什么建议吗?
    • 参考link
    • 非常感谢,您的回答对我很有帮助。如果您对此感兴趣,这是我的另一个问题。
    猜你喜欢
    • 2017-03-16
    • 1970-01-01
    • 2018-12-16
    • 2020-11-19
    • 2018-02-02
    • 2017-04-12
    • 1970-01-01
    • 2020-05-02
    • 2018-08-22
    相关资源
    最近更新 更多