Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在不丢失数据的情况下向Cassandra数据库添加列_Java_Spring Boot_Cassandra - Fatal编程技术网

Java 在不丢失数据的情况下向Cassandra数据库添加列

Java 在不丢失数据的情况下向Cassandra数据库添加列,java,spring-boot,cassandra,Java,Spring Boot,Cassandra,我正在使用集成到spring boot应用程序中的Cassandra数据库 我的问题是关于模式操作。如果需要对数据库进行结构更改,例如向表中添加列,则需要重新创建数据库,但这意味着删除所有现有数据: schema-action: CREATE_IF_NOT_EXISTS 我解决这个问题的唯一方法是使用重新创建方案操作,但如前所述,这会导致数据丢失 处理这个问题的最佳方法是什么?要添加结构更改(如列名),而不必重新创建数据库并丢失所有现有数据 感谢Cassandra允许您通过cqlsh使用语句修

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

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

schema-action: CREATE_IF_NOT_EXISTS
我解决这个问题的唯一方法是使用
重新创建
方案操作,但如前所述,这会导致数据丢失

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


感谢

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

这些限制的原因大多是Cassandra需要如何处理表中已经存在的旧数据。例如,如果说a列到目前为止包含字符串,现在将包含整数,那么我们应该如何处理a列中所有非整数的旧值呢


正如Aaron在评论中正确地指出的,您不太可能希望将这些模式更改作为应用程序的一部分。这些操作通常很少是手动完成的,或者是通过一些管理应用程序完成的,而不是通常的应用程序。

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

这些限制的原因大多是Cassandra需要如何处理表中已经存在的旧数据。例如,如果说a列到目前为止包含字符串,现在将包含整数,那么我们应该如何处理a列中所有非整数的旧值呢


正如Aaron在评论中正确地指出的,您不太可能希望将这些模式更改作为应用程序的一部分。这些操作通常很少是手动完成的,或通过一些管理应用程序完成的,而不是通常的应用程序。

添加列不应导致数据丢失。专业提示:不要在应用程序代码中进行模式修改,否则会很糟糕。但除非我使用“重新创建模式”操作,否则不会创建列。这正是我的观点。从cqlsh而不是从Spring/Java代码添加列。添加列不应导致数据丢失。专业提示:不要在应用程序代码中进行模式修改,否则会很糟糕。但除非我使用“重新创建模式”操作,否则不会创建列。这正是我的观点。添加来自cqlsh的列,而不是来自Spring/Java代码。回答得好!我没有想到OP可能试图执行违反
ALTER
限制的列添加。回答得好!我没有想到OP可能试图执行违反
ALTER
限制的列添加。