【问题标题】:Add Column to Cassandra db with out losing data将列添加到 Cassandra db 而不会丢失数据
【发布时间】:2021-01-04 10:40:47
【问题描述】:

我正在使用集成到 Spring Boot 应用程序中的 Cassandra 数据库。

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

schema-action: CREATE_IF_NOT_EXISTS

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

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

谢谢

【问题讨论】:

  • 添加列不应导致数据丢失。专业提示,将架构修改排除应用程序代码,否则您将度过一段糟糕的时光。
  • 但除非我使用 RECREATE 模式操作,否则不会创建该列
  • 这正是我的观点。从 cqlsh 添加列,而不是从 Spring/Java 代码添加。

标签: java spring-boot cassandra


【解决方案1】:

Cassandra 确实允许您修改现有表的架构,而无需从头开始重新创建它,使用 ALTER TABLE 语句通过 cqlsh。但是,正如该链接中所述,您可以进行的更改类型存在一些重要限制。根本不能修改表的主键,可以添加或删除常规列,不能将列的类型更改为不兼容的类型。

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

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

【讨论】:

  • 好答案!我没有想到 OP 可能一直在尝试执行违反 ALTER 限制的列添加。
猜你喜欢
  • 2020-09-22
  • 2015-05-14
  • 2020-07-21
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
相关资源
最近更新 更多