1

I have a question regarding Cassandra batch isolation:

Our cluster consist of a single datacenter, replication factor of 3, reading and writing in LOCAL_QUORUM. We must provide a news feed resembling an 'after' trigger, to notify clients about CRUD events of data in the DB. We thought of performing the actual operation, and inserting an event on another table (also in another partition), within a batch. Asynchronously, some process would read events from event table and send them through an MQ.

Because we're writing to different partitions, and operation order is not necessarily maintained in a batch operation; is there a chance our event is written, and our process read it before our actual data is persisted?

Could the same happen in case our batch at last fails?

Regards, Alejandro

4

1 に答える 1

1

ACID プロパティから、Cassandra は ACD を提供できます。したがって、古典的な意味での分離を期待しないでください。

レコードをバッチ処理すると、原子性が提供されます。したがって、バッチ内のすべてのレコードが書き込まれるか、まったく書き込まれないことが保証されます。ただし、分離は保証されないため、一部のレコードが永続化され、他のレコードが永続化されない場合があります (たとえば、キュ​​ー テーブルに書き込まれ、マスター テーブルには書き込まれません)。

Cassandraのドキュメントでは、その仕組みについて説明しています。

原子性を実現するために、Cassandra は最初にシリアル化されたバッチを blob データとして使用するバッチログ システム テーブルに書き込みます。バッチ内の行が正常に書き込まれ、永続化 (またはヒント) されると、バッチログ データは削除されます。原子性にはパフォーマンスのペナルティがあります。

最後に、Cassandra テーブルを MQ として使用することは、アンチパターンと見なされます。

于 2016-01-25T16:01:09.403 に答える