在不丢失数据的情况下将列添加到 Cassandra 数据库

Add Column to Cassandra db with out losing data

我正在使用集成到 spring 启动应用程序中的 Cassandra 数据库。

我的问题是关于架构操作的。如果我需要对数据库进行结构更改,比如向 table 添加一列,则需要重新创建数据库,但这意味着所有现有数据都将被删除:

schema-action: CREATE_IF_NOT_EXISTS

我设法解决这个问题的唯一方法是使用 RECREATE 方案操作,但如前所述,这会导致数据丢失。

处理此问题的最佳方法是什么?要添加结构更改(例如列名)而不必重新创建数据库并丢失所有现有数据?

谢谢

Cassandra 允许您修改现有 table 的架构,而无需从头开始重新创建它,使用 ALTER TABLE 语句通过 cqlsh。但是,如 link 中所述,您可以进行的更改类型有一些重要的限制。您根本无法修改 table 的主键,您可以添加或删除常规列,并且无法将列的类型更改为 non-compatible。

大多数这些限制的原因是 Cassandra 需要如何处理 table 中已经存在的旧数据。例如,说 A 列之前包含字符串 - 现在将包含整数 - 我们应该如何处理 A 列中所有不是整数的旧值是没有意义的?

正如 Aaron 在评论中所说的那样,您不太可能希望将这些架构更改作为应用程序的一部分。这些通常是手动或通过某些管理应用程序完成的罕见操作 - 不是您常用的应用程序。