如何存档和清理Cassandra数据

8

我有一个包含多个数据中心的Cassandra集群。我想每月归档并清除数据。有很多关于备份和恢复的文章,但没有关于在Cassandra集群中存档数据的说明。

请问有谁能告诉我如何在Cassandra集群中每月归档数据并清除数据。


你能用Java或C#吗? 你可以创建一个控制台,从cassandra中提取数据并进行归档。 - danvasiloiu
除了Cassandra内置的Spark作业之外,是否还有其他方法? - Nipun
让我们谈谈归档,这是我们需要定期执行以节省磁盘空间的事情,因此它不是实时作业,所以让批处理来完成。第二件事是我们需要为释放空间而执行它,以便 CQL 运行更快。这只是获取数据->压缩数据->将其放入另一个位置,因此我建议编写一个批处理作业,从 Cassandra 中提取数据并在集群外或集群内使用 snappy 进行压缩。 - Amey Jadiye
2个回答

1
我认为没有这样的工具可以用于归档cassandra数据。您需要编写使用CqlInputFormat的Spark作业或MapReduce作业来归档数据。您可以参考以下链接,了解人们如何在cassandra中归档数据:
[1] - [http://docs.wso2.org/display/BAM240/Archive+Cassandra+Data] [2] - http://docs.wso2.org/pages/viewpage.action?pageId=32345660 [3] - http://accelconf.web.cern.ch/AccelConf/ICALEPCS2013/papers/tuppc004.pdf 此外,还有一种方法可以打开cassandra中的增量备份,类似于CDC。

2
我无法访问任何链接。 - Nipun

1
最佳实践是使用时间窗口压缩策略,并在表上设置每月的时间窗口和TTL(一个月),以便可以清除超过一个月的数据。如果编写了一个清除作业来删除这些未应用正确压缩策略的表中的数据,那么这可能会影响集群性能,因为按日期/月份搜索数据将使集群超负荷。我曾经有过这样的经历,最终我们不得不回到更改表结构并修改压缩策略。这就是为什么一开始就设计好表格非常重要的原因。我们需要考虑(从一开始)数据将如何插入和读取到表格中,以及如何删除它,然后制定键、压缩、ttl等。对于归档,只需编写几行代码从Cassandra读取数据并将其放入您的归档位置即可。如果这有助于获得您想要的最终结果,或者如果您有进一步的问题需要帮助,请告诉我。

如果您进行数据更改,它将无法正常工作... TWCS 的使用范围相当有限。 - Alex Ott
Cassandra 的设计是不可变的,因此您无法更改任何内容。即使您需要更改/更新任何记录,也将进行插入操作,并将旧记录标记为墓碑。 TWCS 对于支持有效删除非常有用。 - Chandan Goel
我知道Cassandra磁盘上的数据是不可变的...我的观点是,只有在不进行太多更改并且有限数量的用例可以实现的情况下,TWCS才能发挥良好的作用... - Alex Ott
上面的问题需要知道如何每月清除数据,因此对于这种情况,TWCS 将很好地解决。关于您的担忧 - 如果您想回到过去并更改历史记录或进行任何设计更改,则机会较少。在那种情况下,我建议重新考虑工具的选择本身。Cassandra 可能不是每个用例的正确选择。我希望这有意义。 - Chandan Goel
1
我见过很多需要删除数据的客户,但是这些数据在处理交易时会发生变化。你会先接收到带有“开始”状态的初始事务,然后它会变成“检查”,再到“已支付”,最后到“完成” - 这一切可能在1秒钟内完成。但是这些都是变化,数据在此之后是不可变的,并且需要被清除... - Alex Ott
真的伙计!!但是在几秒钟内更新的交易不会在那一秒钟被删除,甚至不会在那一天被删除。现在,如果您想在数据变为1个月后立即删除数据,则可以设置1天的TWCS窗口。因此,您有30个桶。有压缩周期将保留1天的桶中的数据,并根据数据的到达进行清除。感谢您的耐心等待。 - Chandan Goel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接