Spring Data Cassandra Insert 创建单元格墓碑
Spring Data Cassandra Insert creating cell tombstones
我正在使用 Spring Boot 1.5。1.RELEASE 和 spring-boot-starter-data-cassandra。
我 运行 在使用 CassandraOperations.insert 时遇到了一个问题,它导致了一堆单元格墓碑。这似乎是由以下原因引起的:https://jira.spring.io/browse/DATACASS-182。由于 Spring Data 现在为空值插入一个实际的空值,这会导致单元格逻辑删除。我还没有找到任何方法告诉 Spring Data 不要这样做。有配置什么的我可以说 "for this insert, do not insert actual null values"?
目前这是 Spring Data Cassandra 的限制。我创建了 https://jira.spring.io/browse/DATACASS-420 来跟踪这个。我暂时解决这个问题的方法是创建一个扩展 MappingCassandraConverter 的自定义 class 并且我重写了 writeInsertFromWrapper 方法以不插入空值。
最简单且非侵入性的解决方案之一是使用
CassandraTemplate.insert()/CassandraBatchOperations.insert()
基本上,逻辑删除是在生成的 CQL 具有明确的空值时创建的。例如下面的查询将插入一个墓碑。
Insert into KeyspaceName.TableName(ColumnName1, ColumnName2, ColumnName3)
values (Column1Value, Column2Value, null)
Cassandra 将插入视为更新插入,并且对于每个空值,它会尝试删除现有列值而不执行检查列值是否存在。因此,对于每个空值,它都会创建一个墓碑,这意味着该值已被删除。
但是以下查询不会创建逻辑删除。
Insert into KeyspaceName.TableName(ColumnName1, ColumnName2)
values (Column1Value, Column2Value)
CassandraTemplate.insert()/CassandraBatchOperations.insert()
生成的查询忽略具有空值的列,并使用具有 non-null 值的列生成 CQL。因此不会创建墓碑。
我正在使用 Spring Boot 1.5。1.RELEASE 和 spring-boot-starter-data-cassandra。
我 运行 在使用 CassandraOperations.insert 时遇到了一个问题,它导致了一堆单元格墓碑。这似乎是由以下原因引起的:https://jira.spring.io/browse/DATACASS-182。由于 Spring Data 现在为空值插入一个实际的空值,这会导致单元格逻辑删除。我还没有找到任何方法告诉 Spring Data 不要这样做。有配置什么的我可以说 "for this insert, do not insert actual null values"?
目前这是 Spring Data Cassandra 的限制。我创建了 https://jira.spring.io/browse/DATACASS-420 来跟踪这个。我暂时解决这个问题的方法是创建一个扩展 MappingCassandraConverter 的自定义 class 并且我重写了 writeInsertFromWrapper 方法以不插入空值。
最简单且非侵入性的解决方案之一是使用
CassandraTemplate.insert()/CassandraBatchOperations.insert()
基本上,逻辑删除是在生成的 CQL 具有明确的空值时创建的。例如下面的查询将插入一个墓碑。
Insert into KeyspaceName.TableName(ColumnName1, ColumnName2, ColumnName3)
values (Column1Value, Column2Value, null)
Cassandra 将插入视为更新插入,并且对于每个空值,它会尝试删除现有列值而不执行检查列值是否存在。因此,对于每个空值,它都会创建一个墓碑,这意味着该值已被删除。
但是以下查询不会创建逻辑删除。
Insert into KeyspaceName.TableName(ColumnName1, ColumnName2)
values (Column1Value, Column2Value)
CassandraTemplate.insert()/CassandraBatchOperations.insert()
生成的查询忽略具有空值的列,并使用具有 non-null 值的列生成 CQL。因此不会创建墓碑。