Computer Science/Cassandra
[Cassandra] BatchOps insert if exist 컬럼에 null로 업데이트 하고 싶을 때
백엔드 규니
2024. 6. 15. 17:50
728x90
반응형
Cassandra BatchOps Write Option에 대하여
Cassandra에서 insert, update는 둘 다 upsert 방식으로 동작하기 때문에 근본적으로는 큰 차이가 없습니다. 자세히 들어가면 약간의 차이가 있지만 해당 내용은 이 글에서 다루지 않겠습니다.(참고 Link)
cassandraTemplate.batchOps()
.insert(Entities)
.insert(Entities2)
.execute();
카산드라에서 batchOps를 통해서 경량 트랙잭션을 사용하여 원자성을 보장하도록 저장할 수 있습니다.
- 존재하지 않는 PK에 대하여 INSERT -> 저장
- 존재하는 PK에 대하여 INSERT -> 업데이트
위처럼 동작하게 될텐데 존재하는 PK의 row 필드 중에서 값이 존재하는데 null로 변경하려고 할 때는 적용이 되지 않았습니다.
왜 적용이 안되지 하면서 찾아보았는데 원인은 batchOps insert 할 때 특정 필드가 null 이면 제외하는 것이 디폴트 옵션이라 그렇습니다.
cassandraTemplate.batchOps()
.insert(Entities, InsertOptions.builder().withInsertNulls().build())
.execute();
만약에 null로 업데이트 하고 싶다면 위와 같이 InsertOptions
을 사용하면 됩니다.
Reference
반응형