質問
私りNoSQLのためのスケーリングの代替データベース化します。場合は?い取引に基づくものを敏感にこれらのうんだろうって。
解決
一般的に言って、のNoSQLソリューションは、リレーショナルデータベースより軽量トランザクション・セマンティクスを持っているが、まだいくつかのレベルでアトミック操作のための施設を持っています。
一般的に、マスター・マスター・レプリケーションを行うものは、可用性の一貫性の方法で、以下、よりを提供しています。だから、一つは右の問題のための適切なツールを選択する必要があります。
単一の文書で多くのオファー取引(又は行等)レベル。 MongoDBを持つ例えばそこアトミックは、単一のドキュメントである - しかし、文書はかなり豊富でできるので、これは通常、かなりうまく機能 - の詳細情報を<のhref = "http://www.mongodb.org/display/DOCS/Atomic+Operations "REL =" noreferrer ">ここを。
他のヒント
これは、最寄りの答えを見つける適切NoSQLデータベースです。では、2007年のブログからアダム-ウィギンズアのHeroku.com:
旧例のデータベースを用いた取引は金から銀行口座を他合計bull.正しい値段が高くなりますが、店の一覧を口にはイベントの間を結ぶ交通機関勘定の電流バランスとしての総和。だプログラミング機能言語(またはと考えたとされることがありますこれは当然のことです。
: http://adam.heroku.com/past/2007/12/17/a_world_without_sql/ (こちらのウェブサイトはアイデアします。.ディス)
私は解釈される上記の項として
- データベースの作成のための会員ます。
- の作成、メッセージキューに挿入します愛称で"台帳"
- 追加の背景に労働者のための申請ごとにキューに挿入します
詳細情報.にキュー/背景に労働者: http://adam.heroku.com/past/2009/4/14/building_a_queuebacked_feed_reader_part_1/
のクライアント(通称、会員又はお客様において以下の歩み出金
- 請求を取り出します。
- 送信されたリクエストであることをサーバーです。
- サーバの場所であります。のメッセージ:送料のご負担を軽減するため$5,000."
- クライアントが表示されます:"お待ちくださいとの要請が満たされ..."
- クライアントマシンの投票サーバを2秒毎い"との要求を満たすことが?"
- サーバーにバ背景に労働者をめには、さらに以前からのご要望を他のメンバーに先入れ先出します。最終的には、そのクライアントの要求を取り出します。
- 一度要求を満たすことが、クライアントはメッセージを新しいバランスです。
利用できるHeroku.com を小型モックアップを迅速にご快適Node.js Ruby/ット
一般に考えんやとりを引き、データベースでの超硬めます。
免責事項: まだ実施してこなった。ある時なんか、僕たちのためにこれらのもの好奇心をもって実践が必要です。無@gbnが利用できるよう、RDBMSの取引をいただくと十分なために必要とし揮する。しかし、も楽しいのではないでしょうか見どこまでできるNoSQLデータベースオープンソースのツールやウサイトに"竜巻のRazorblades".
のNoSQL のキー値 - 、文書などのツールとサービスの多様なセットをカバー、グラフおよびワイドカラムを格納します。彼らは通常、通常のデータ処理を分散することによって、データストアのスケーラビリティを向上してみてください。 トランザクションは、各DBは、ユーザの操作を実行する方法のACID の性質noreferrer"> CAP定理である:一貫性、可用性そして、分割耐性を同時に達成することはできません。 SQLは、NoSQLのとNewSQLツールは、彼らが何をあきらめるに応じて分類することができます。良い数字がここを見つけることがあります。
ACIDを交換要求の新しい、より弱いセットは BASEする(「基本的にavalilable、柔らかく状態、結果整合性」)。しかし、最終的には一貫性のあるツール(「最終的にはすべてが最後に更新された値を返します項目へのアクセス」)の銀行のようなトランザクションアプリケーションではほとんど許容されています。ここでは良いアイデアは、列指向と分散SQL / ACIDのデータベース、例えば VoltDB のインメモリ使用することです;私は、これらの「NewSQL」ソリューションを見てお勧めします。
ちょうどこのスレッドに金銭取引のアドバイスにコメントしたかったです。トランザクションは、あなたが本当にお金を転送して使用したい何かされます。
転送をQUEんどのように与えられた例は非常に素晴らしく、整頓されています。
しかし、本当の生活の中でお金を転送する他のアカウントへの手数料や支払を含むことができます。人々は別のアカウントから来たか、同じシステム内の別のアカウントに自分のアカウントから取得した手数料を得ることができ、特定のカードを使用するためのボーナスを得ます。手数料や支払いは、金融取引によって異なることができますし、それが来るよう、各トランザクションのクレジットカードやデビットを示し簿記システムを維持する必要がある場合があります。
これは1つのアカウントにクレジットが1つまたは複数の口座に引き落としすることができますので、複数の行と同じ時間を更新することを意味します。何も、あなたが書き込んだデータがトランザクションと一致していることを確認し、更新前に変更することはできませんので、まず最初に、行をロックします。
あなたが本当にトランザクションを使用する理由です。何が1行に間違った書き込みを行く場合は、一貫性のないエンディング金融取引データなし更新の全体の束をロールバックすることができます。
の問題につい取引や業務(例えば一料5,000ドル、受5,000ドル)として口座と同じ優先度です。利用できません一つのアカウントの確認(または逆のことである。その場合保証唯一アカウントの正しい(すな確認)、秒(その確認となっている場合があり失敗します。ょう理由で失敗メッセージを使用aproatch、送信者を確認する受信装置):
- 書+$5,000受取人口座
- が成功の書き込み5,000ドルを送信者口座
- 場合には失敗しかできないagaint解除するにはメッセージ
で保証して保存#1.が保証さ#2不?同一のための逆です。
ここで実装することなく取引やNoSQL.いつでも利用可第三者が確認されるから送信側と受信側、保証業務を行った:
- 発生独自のトランザクションidを取引法
- 書+$5,000受取人口座(参考にトランザクションid)
- が成功のセット状態の取引で送信
- 書き込み5,000ドルをsedned口座の口座を参考にトランザクションid)
- が成功のセット状態の取引を受ける
この取引の記録は保証であったために送受信をマッサージします。現在確認できますの全てのメッセージによる取引idの場合には状態を終了させていただきましたまだアカウントのユーザーの残高とします。
は、私はあなたが「楽観的トランザクションを使用することができ、一般的に言うでしょう...あなたのDBに依存するが、これを達成するための」のが、私は1つが、データベースの実装のアトミック保証(例えばアトミックある書き込みの種類とリード時)。
ネットの上いくつかの議論があるようです HBaseのの取引について、任意の助けをthatsの場合ます。
あなたは常にSQL DBにNoSQLのアプローチを使用することができます。 NoSQLのは、一般的に「キー/値のデータストア」を使用するようです:あなたは、常にお好みのRDBMSでこれを実装し、NoSQLの性能と柔軟性のメリットを実現しながら、したがって、などの取引、ACID特性を、あなたの優しいDBAからのサポート、のような良いものを保つことができます例えば、そのような
のようなテーブルを介してCREATE TABLE MY_KEY_VALUE_DATA
(
id_content INTEGER PRIMARY KEY,
b_content BLOB
);
ボーナスは、あなたはまだ(aptの場合またはTEXT)フィールドをあなたのかさばるメインBLOBの内容を維持しながら、他の、適切にリレーショナルテーブルにあなたのコンテンツをリンクするためにここに余分なフィールドを追加することができます。
あなたは、例えば、データを操作するための言語に縛られていないので、個人的に私は、テキスト表現を好みます直列化されたJavaを使用すると、あなたはレポートのためのPerlからコンテンツにアクセスできることを意味し、言います。 TEXTはまた、デバッグが容易であり、一般的に開発者としてでは動作します。
強い一貫性と実装の取引とそのAなしのSQL DBをscalarisを見てます。
です。 http://djondb.com のを見て、あなたが役立つことができると思い任意の機能を追加すること自由に感じます。
- 新しいスマートフォンを使っ FoundationDB
- 古いキーワード Berkley DB
確かにありその他
あなたはのNoSQLソリューションの上に楽観的なトランザクションを実装することができます。私はMongoDBの中でそれを行う方法を例示し、いくつかの GitHubののページを書きましたが、あなたは、任意の適切なのNoSQLソリューションでそれを繰り返すことができます。