0

AmazonSimpleDBとs3に依存するスマートフォンアプリがいくつかあります。

アーキテクチャは通常、非常にシンプルで、データの機密性は低く、アプリごとのユーザー数はそれほど多くありません。アプリはAmazonに直接クエリを実行します(中央に独自のサーバーがあるのとは対照的です)。

これまでのところすべてが良好であり、私たちの合理的なニーズに完全に応えています。

しかし今、私はこの問題を抱えており、アプリの1つが2つのSimpleDBプットで構成される操作をトリガーする必要があります。

問題は、これらの「2プット」は、オールオアナッシングブロックとして、アトミックな方法で実行する必要があるということです。2つのプットの間では、データベースに整合性がなく、その悪い状態で誰もデータベースを読み取ることができないはずです。

ですから、私が見ているのはこれを達成するための最も簡単な方法です。これには、読み取りだけを含め、操作が1つずつ処理されるある種のキューが含まれると思います。

しかし、正直なところ、それは私の領域ではなく、専用サーバー上に非常に複雑なWebアプリケーションを作成する必要がないことを願っています。

私が明らかにまだ持っていない種類の知識への回避策や指針をいただければ幸いです。

ありがとう!

4

1 に答える 1

1

原子性とトランザクションは、SimpledDBのようなNoSQLソリューションを使用するときに諦めるリレーショナルデータベースの優れた機能の一部です。AmazonRDSや他の多くのホストされたDBベンダーの1つによって提供されているような安価なホストされたMySQLデータベースを検討することをお勧めします。ただし、SimpleDBを続行する場合は、キューイングは必要ありませんが、独自のトランザクションをロールして、Willyが提案したようにすることができます。

  1. 保存したアイテムに「コミット済み」などの属性を追加します。
  2. 以前に保存したすべてのアイテムをcommited=1の値で更新できるツールを作成します(または製品を見つけます)。
  3. 2ステップ操作の最初のステップで属性commited=0のアイテムが保存され、2番目のステップでcommited = 1に設定してアイテムを「コミット」するように、コードを更新します。
  4. すべてのクエリを変更して、コミットされたアイテムのみをプルするようにします。たとえば、「select * from your_domain where {criteria1} and {criteria2} and {morecriteria} and commit='1'」のようになります。
于 2013-05-05T17:31:23.900 に答える