3

Cassandraでデータの整合性を維持する最良の方法は何ですか? 電子商取引アプリケーションのプライマリ データストアとして cassandra を使用しています。非正規化後、データは複数の列ファミリーに分散されます。たとえば、「アイテム」CF がある場合:

CF: Items
------------------------------------------------
       | itemName |  price  |  rating  |
ItemId |----------|---------|----------|  ...
       |   value  |  value  |   value  |
------------------------------------------------

「評価が 5 のすべての項目」を取得するクエリを満足させる別の列ファミリを使用できます。クエリ列ファミリーには、特定のアイテムに関する追加情報を含めることができます。

CF: ItemsByRating
----------------------------------------------------------------
         |   itemId1     |   itemId2     |   itemId3     |
5 rating |---------------|---------------|---------------| ...
         | item1 details | item2 details | item3 details |
-----------------------------------------------------------------

「Items」CF の詳細の変更を通知し、「ItemsByRating」CF の値フィールドに必要な更新を行うデーモンを実行しています。アイテムのクエリを処理する CF が多数ある場合、これは複雑になります。それを行う最善の方法はありますか?

4

2 に答える 2

2

この特定の状況 (指定された評価のアイテムのクエリ) では、 CFのrating列でセカンダリ インデックスを使用することをお勧めします。ItemsCassandra はインデックスの更新を処理し、どの外部デーモンよりもはるかに高速です。Cassandra で整合性を保証するデーモンを実装するのは非常に困難です。フェールオーバー レイヤー全体を実装する必要があるからです。

一般的な問題 (Cassandra の e コマース サイト) については、SQL データベースなど、Cassandra の外部で一貫したデータを保持することをお勧めします。

大規模な e コマース サイトでさえ、カタログに 100 万を超えるアイテムがほとんどなく、1 日あたり数百万を超えるトランザクションを処理しています。マスター/スレーブ レプリケーションを使用する MySQL は、この量のデータを簡単に処理できます。トランザクションを一貫して処理する cassandra のみに基づいた e コマース システムを設計することは可能ですが、Zookeeper や Hazelcast を使用した分散行ロックや外部ロックなど、さまざまなトリックが必要になります。この量のデータ (数百万行) では、SQL データベースはより高速でシンプルになり、はるかに安定します。はい、単一障害点があります。しかし、ダウンしている電子商取引アプリケーションは、ランダムなトランザクションを実行するアプリケーションよりも優れています。

真にスケーラブルなシステムを構築するには、Cassandra を使用して、ページ ビューなどの強力な一貫性を必要としないデータを処理する場合があります。1 つのページ ビュー イベントが失われても問題ありません。データは、データ マイニング、機械学習には十分なデータです。など

于 2013-01-16T11:26:26.417 に答える