DBMS/Cassandra

카산드라 Batch operation

반응형

Batch Operation

  • 여러 쿼리들을 배치 처리할 수 있는 오퍼레이션. 해당 Batch Operation을 사용하면 각 오퍼레이션의 대상이 동일한 파티션인 경우 원자성과 격리성을 보장함. (다수의 파티션을 대상으로 하는 경우 원자성만 보장함)
  • 다만 잘못 사용하는 경우, 많은 성능 하락을 유발할 수 있어서 잘 사용해야 함.


Logged/UnLogged Batch

  • 단일 파티션을 대상으로 하는 Batch Operation은 Unlogged Batch로도 원자성과 격리성을 보장할 수 있음.
  • 다만 다중 파티션을 대상하는 Batch Operation은 원자성을 보장하기 위해서 Logged Batch를 필요로 함.
    • 다만 다중 파티션을 대상으로 하는 경우 Logged Batch를 사용하더라도 격리성을 보장할 순 없음
  • (참고로 카산드라 특성상, 같은 키스페이스 내의 다른 테이블이더라도, 같은 파티션에 저장될 수 있음)


Logged Batch

다중 파티션에 Logged Batch Operation을 요청하면, 원자성을 보장하기 위해서, 카산드라는 Operation 수행 전 먼저 각 파티션에 batch log를 저장하고 Operation들이 성공하면 그때 batch log를 제거하는 방식으로 동작한다.

  • 이런 이유로 당연하게 성능이 감소함 (대상 파티션이 많아질수록 점점 더 성능이 감소할 수 있음)
  • 같은 파티션 내에 UnLogged Batch를 사용하거나, 적은 수의 파티션을 대상으로 Logged Batch를 사용하는 등 적절히 사용해야함.


Unlogged Batch

단일 파티션을 대상으로 하는 경우 굳이 batch log를 저장할 필요가 없음.

  • 이런 이유로 단일 파티션을 대상으로 하는 Batch의 경우 default로 UnLogged Batch로 동작하고, 굳이 Logged Batch Operation 사용을 할 필요가 없음.

다중 파티션을 대상으로 하는 경우에도 원자성 보장이 필요 없다면, Unlogged Batch Operation을 사용하면 batch log를 저장하지 않기 때문에, log batch로 인한 성능 감소를 없앨 수 있음.


Counter Batch

  • 카산드라 카운트 컬럼에, 대한 Batch 처리를 위한 Counter batch 옵션을 제공함.
  • 다만 기본적인 타입과 카운터 타입에 대해서 같은 Batch Operation에 포함할 수 없는 제약사항이 존재함
반응형