Spring-boot + Ignite在Cassandra中创建空值墓碑

问题描述

我将cassandra用作Ignite的第三方商店。为了将数据持久保存到Ignite,我使用spring-boots ignite-jpa实现,并且我的对象通常具有未填充的字段,因此为null。自然地,当数据保留到cassandra中时,这将创建一个空值逻辑删除,在我的情况下,由于数据量很大,会创建很多逻辑删除

有人知道我是否可以指定在插入期间不设置(取消设置)具有空值的字段(列)吗?

我知道cassandra中的null值具有特殊含义,这种方法最终不会在更新为null的情况下覆盖列值。但是,我不关心这种情况。

到目前为止,我所做的是实现我的自定义CassandraCacheStoreFactory,但是如果有更简单的方法,我会徘徊。

解决方法

如果您插入null值,则集群侧无法告诉Cassandra忽略它。

但是在客户端,您可以使用驱动程序告诉它忽略空值,这样它就不会将其发送给Cassandra。

看看InsertOptions.InsertOptionsBuilder,有一种方法告诉驱动程序忽略空值:withInsertNulls(boolean insertNulls),我认为它适合您的用例:

https://docs.spring.io/spring-data/cassandra/docs/current/api/org/springframework/data/cassandra/core/InsertOptions.InsertOptionsBuilder.html#withInsertNulls-boolean-