【问题标题】:Deleting Huge Data In Cassandra Cluster删除 Cassandra 集群中的大量数据
【发布时间】:2019-02-28 14:48:15
【问题描述】:

我有三个节点的 Cassandra 集群。过去 4 年的数据接近 7 TB。现在由于服务器可用空间减少,我们希望仅保留最近 2 年的数据。但我们不想完全删除它(超过 2 年的数据)。我们希望保留超过 2 年的特定数据。 目前我可以想到一种方法: 1) Java 客户端使用“MutationBatch 对象”。我可以获得所有属于日期范围的记录键,并且不包括我们不想删除的行。然后批量删除记录。但由于数据量巨大,这种解决方案引发了对性能的担忧。

是否可以在服务器级别(opscenter)处理它。我阅读了有关 TTL 的信息,但如何将其应用于现有数据并限制一些我想要保留的数据,即使它超过 2 年。

请帮助我找出最佳解决方案。

【问题讨论】:

    标签: solr cassandra opscenter


    【解决方案1】:

    您需要了解的主要一点是,当您在 Cassandra 中删除数据时,实际上是通过编写 tombstone 来添加它们,然后在压缩过程中会删除实际数据。

    因此正确执行删除非常重要。有不同类型的删除 - 单个单元格、行、范围、分区(根据生成的墓碑数量从最不有效到最有效)。最适合您的是按分区删除,然后第二个是按分区内的范围。 Following article 详细描述了如何删除数据。

    您可能需要分几个步骤执行删除,因此您不要添加太多数据作为墓碑。您还需要检查是否有足够的磁盘空间进行压缩。

    【讨论】:

    • 目前我们没有足够的空间,并且由于堆内存不足,Cassandra 有时会出现故障。在这种情况下,我不太担心删除这么多记录(即使我在分区中删除,数据也很大,删除会花费很多时间)。在这种情况下是否可以使用 TTL?我不确定我们是否可以在现有记录上应用 TTL。
    • 添加 TTL 与删除的效果相同 - 已经在磁盘上的数据不被修改,而是添加新数据。如果您使用DELETE FROM table where partID = xxxx 删除整个分区,Cassandra 将只添加一个墓碑,而不是每个行/单元格的墓碑...
    猜你喜欢
    • 2019-01-04
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 2016-08-09
    相关资源
    最近更新 更多