删除 Cassandra 集群中的大量数据
Deleting Huge Data In Cassandra Cluster
我有三个节点的 Cassandra 集群。我们拥有过去 4 年的近 7 TB 数据。现在由于服务器中可用的 space 较少,我们只想保留最近 2 年的数据。但我们不想完全删除它(超过 2 年的数据)。我们希望保留特定数据,即使它已超过 2 年。
目前我能想到一种方法:
1) Java 客户端使用 "MutationBatch object"。我可以获得所有属于日期范围的记录键,并排除我们不想删除的行。然后批量删除记录。但是这个解决方案引起了对性能的担忧,因为数据量很大。
是否可以在服务器级别(opscenter)处理它。我阅读了有关 TTL 的信息,但如何将其应用于现有数据并限制一些我想保留的数据,即使这些数据已超过 2 年。
请帮我找出最佳解决方案。
您需要了解的主要事情是,当您在 Cassandra 中删除数据时,您实际上是通过写入墓碑来添加它们,然后在压缩过程中删除实际数据。
所以正确执行删除非常重要。有不同类型的删除 - 单个单元格、行、范围、分区(根据生成的墓碑数量从最不有效到最有效)。最适合你的是按分区删除,然后第二个是按分区内的范围删除。 Following article 详细描述了如何删除数据。
您可能需要分几步执行删除操作,所以不要添加太多数据作为逻辑删除。您还需要检查是否有足够的磁盘 space 用于压缩。
我有三个节点的 Cassandra 集群。我们拥有过去 4 年的近 7 TB 数据。现在由于服务器中可用的 space 较少,我们只想保留最近 2 年的数据。但我们不想完全删除它(超过 2 年的数据)。我们希望保留特定数据,即使它已超过 2 年。 目前我能想到一种方法: 1) Java 客户端使用 "MutationBatch object"。我可以获得所有属于日期范围的记录键,并排除我们不想删除的行。然后批量删除记录。但是这个解决方案引起了对性能的担忧,因为数据量很大。
是否可以在服务器级别(opscenter)处理它。我阅读了有关 TTL 的信息,但如何将其应用于现有数据并限制一些我想保留的数据,即使这些数据已超过 2 年。
请帮我找出最佳解决方案。
您需要了解的主要事情是,当您在 Cassandra 中删除数据时,您实际上是通过写入墓碑来添加它们,然后在压缩过程中删除实际数据。
所以正确执行删除非常重要。有不同类型的删除 - 单个单元格、行、范围、分区(根据生成的墓碑数量从最不有效到最有效)。最适合你的是按分区删除,然后第二个是按分区内的范围删除。 Following article 详细描述了如何删除数据。
您可能需要分几步执行删除操作,所以不要添加太多数据作为逻辑删除。您还需要检查是否有足够的磁盘 space 用于压缩。