2011-10-20 18 views
4

私は高可用性の非常に大量のショッピングカートアプリケーションを構築しようとしています。アプリケーションは、私がデータベースのためにmysqlの代わりにcassandraを使用することを検討しているほど高いボリュームを持ちます。お支払い情報を保存するためのカッサンドラ

現在、ショッピングカートシステムでは、ほとんどのデータベースアクションは100%整合している必要がありますが、他のものはそうである必要はありません。

100%整合動作の例: 支払い確認の保存。 購入したアイテムのリストを保存します。

お客様の住所を保存する(お支払い時に住所がデータベースに保存されていない場合は、その住所が失われたとみなして再度顧客にお尋ねください) 。 他の同様のもの。

同じ地域(Amazon EC2)でサーバークラスタを実行している場合、すべてのトランザクションを最大限の一貫性のあるトランザクションとして実行するための大きな障害が存在します。 mySQlリレーショナルデータベースと同じ信頼性を提供しますか?我々はここで金​​融取引を扱っていることを忘れないでください。

私のデータは一般的に「安全」ですか?これは予期せぬ停電、ランダムディスク障害などを完全に意味します。

答えて

3

一貫性を定義する方法はたくさんあります。 「最大限の一貫性のあるトランザクション」によって、ConsistencyLevel ALLでの読み取りと書き込みを意味する場合、読み取りが期限切れの値を返さないという意味での一貫性と、書き込みが格納されるという意味での耐久性戻す前にすべてのノード。

ただし、取引と同じではありません。カサンドラは取引をサポートしていません。 MySQLのように、異なる行間で一貫性を提供しません。たとえば、買い物カゴにアイテムを追加し、カート内の総コストを更新するとします。個別に、各操作は一貫して永続的に保存されます。しかし、あなたは1つの変化を見ることができるが、他の変化は見ることができない時間の窓があるかもしれない。リレーショナルデータベースでは、それらをグループ化してトランザクションにすることができます。

安全性に関する限り、Cassandraは、リレーショナルデータベースがトランザクションログを使用するのと同じ方法で、すべての書き込みをディスクにコミットログに保存します。したがって、システムクラッシュに関しても同様に安全です。ノード障害に関して、CL.ALLで書き込むと、各レプリカセット内の1つのノードが存続する限り、データを失うことはありません。ディスク障害に関して、それはあなたの基礎となるハードウェア設定の問題です。 RAID。

+0

多くの明確な情報を提供いただき、ありがとうございます。トランザクションの不足を補うには、次のようにします。私は "ロック"と呼ばれるcassandraテーブルを作成します。データベース上でトランザクションを実行したいときは、私が書き込む行を表すuuidをlocksテーブルに追加します。 QUORUMで関心のある行を書き終えたら、私はロックテーブルからuuidsを削除します。独立したクエリがその間に試された場合は、関連するuuidがロックテーブルに存在するかどうかを最初にチェックし、存在する場合は許可されません。それは取引を許可するのでしょうか?非常に遅いもののみ? –

+0

残念ながら、これは次のような競合状態になりがちです。1.クライアントAはロックテーブルをチェックし、何も見つけません。 2.顧客Aは買物カゴを読み取る。 3.クライアントBがロックテーブルに書き込みます。 4.顧客Bは、買い物カゴおよび総費用を更新する。 5.クライアントBがロックを解除します。 6.クライアントAは総コストを読み取り、これは以前に読み取った買い物カゴと矛盾しています。この問題は、Zookeeper(@sdolgyに記載されている)のような強力な分散プロトコルを使用しなければ解決できません。 –

+0

手順の1つをスキップしたと思います。代わりに、最初の手順は次のようになります。1.クライアントAはロックテーブルをチェックし、何も見つけません。 2.クライアントAは、読み取りまたは書き込みを行う各アイテムにロックを挿入します。 3.顧客Aが買物カゴを読み取る。 3.クライアントBは、ロックテーブルをチェックし、それが関心のあるアイテムのロックを見つけて、それを停止します。 4.クライアントAは操作を終了する。 –

5

可用性とEC2に関するご質問にお答えします。セオドア氏が書いたように、カサンドラの一貫性レベルは、データがどのように「安全」であるかを指示します。あなたが直面する問題は、データがCassandraに到達し、トランザクションの目標を達成し、適切に保存されていることを確実にする方法です。

トランザクションに関する良いスレッドがあり、この問題をApache Cassandra Userのメーリングリストで解決しています。それ自身の上

カサンドラは、トランザクションには適していません。

これを回避するには、上記のトランザクションを管理するデータストアとしてカサンドラを活用できる「何か」が必要データ層。

要約...カッサンドラだけでの金融取引を保証することはできません

関連する問題