私はモバイルiOSアプリケーションを作成しています。ユーザーはアカウントを作成して文字列をアップロードできます。それはTwitterのようなものになり、人々に従うことができ、プロファイルの写真などがあります。私はユーザーベースを見積もることはできませんが、アプリが離陸すると、合計データセットがかなり大きくなる可能性があります。SimpleDB Select VS DynamoDBスキャン
Amazon S3に実際のオブジェクトを格納しています。Amazon S3キーをリストしたデータベースのキーはです。です。だから、鍵を保存する方がいいでしょうか?
これはSimpleDBをしてDynamoDBの私の知識である:
のSimpleDB:小/中のデータセット
- 格安
- 行い
- は選択式の を使用して照会することができます
DynamoDBの:
- は高価
- 非常にスケーラブル
- は素晴らしい行います。ミリ秒の応答
- が
を照会することはできませんこれらの点は、私の理解に正確である、DynamoDBのは、キラーの詳細です。高速性とスケーラビリティを備えているため、SimpleDBはクエリと価格に関する情報(優れたパフォーマンスを提供します)です。しかし、これを見ると、速くなり、DynamoDBからすべてのキーをダウンロードしたり、SimpleDBで選択クエリを実行したりするのは難しいでしょうか? 1つは、lotをダウンロードするために驚異的な高速データベースを使用しています(そして、それに合わせる必要があります)。もう1つは、合理的に優れたパフォーマンスのデータベースを使用して、いくつかの正しいオブジェクトをクエリしてダウンロードします。だから、これは速いです:
DynamoDBのすべてのものと一致ORのSimpleDB照会をダウンロードし、ダウンロードすること
(注:マッチングがちょうど-rangeOfString
と文字列比較を使用することを意味、何も電力を消費するか、非時間効率的か何かサーバー側)
マイS3キーがオブジェクト
accountUsernameの種類ごとに、このフォーマットを使用します。typeOfObject:randomGeneratedKey
など。アカウントオブジェクトに参照されている場合
ロハン:アカウント:shd83SHD93028rF
またはプロフィール画像:
ロハン:ProfilePic:Nck83S348DD93028rF37849SNDh
私が持っています一意性のためにランダムに生成されたキーです。何も参照しません。キーが繰り返されないように単純に存在します。 2つのオブジェクトを重複させる。私のアプリで
、私はSimpleDBのかDynamoDBのを選択するか、ので、ここで2つのオプションがあります。
利用のSimpleDB、店舗フォーマットのキーが、属性を使用代わりに、任意の参照のためのフォーマットを使用しませんSimpleDBに格納されます。だから、私はユーザー名、タイプ、そしておそらく私がキーフォーマットに含める必要がある他のもののような属性を持つキーを保存します。だから私はユーザー 'Rohan'からアカウントオブジェクトを取得したい場合。私はSimpleDB Selectを使用して属性 'username'と属性 'type'を照会しています。 (ここでは「アカウント」に一致します)
DynamoDB、ストアキーと各キーは、図の形式になります。すべての単一のキーを返すデータベース全体をスキャンします。その後、キーを取得し、キーフォーマットを利用して、
-rangeOfString
を使用して、必要なものと一致させてS3からダウンロードできます。
また、SimpleDBは明らかに地理的に分散していますが、どうすれば有効にすることができますか?
だから速い以上が信頼できますか? SimpleDBを使用して属性を持つキーを照会する。または、DynamoDBを使用してすべてのキーを保存し、スキャン(すべてのキーをダウンロード)して、 -rangeOfString
?これらがS3オブジェクトへのポインタである短いキーであることを覚えておいてください。ここで
は私の最後の質問で、データベース内のオブジェクトの量はI必要があり、決めた答えに変化します:
- は、ユーザーが
- を持つすべて単一のオブジェクトに別々のキー/オブジェクトを作成します。アカウントキー/オブジェクトを作成し、その中にすべての情報を格納してください。
これらの2つのオプションの間には、明らかに異なる長所と短所があります。たとえば、すべてが別個のものであるかどうかを検索する方が速くなりますが、1つのユーザーアカウントに格納するためのデータセットがより組織化され、それほど大きくありません。
あなたはどう思いますか?
ありがとうございました!私はこれに恩恵をかけ、本当に答えが必要です。
ありがとう:1. DynamoDBのクエリ操作を持っている、それだけでRangeKeyを使用する必要があります。 2.スキャン操作では、テーブル全体でデータを検索できますが、テーブル全体をダウンロードする必要はありません。 3. SimpleDBは、ドメインが作成されたのと同じリージョン内に冗長なレプリカを持っています。データベースのCDNのように動作しません。 –
@BobKinneyテーブル全体を通してデータを見つけることができますが、ダウンロードする必要はありません。 – MCKapur
私が言ったことを正確に意味します。スキャン操作では、DynamoDBテーブルのすべてのデータがスキャンされ、スキャンパラメータと一致するテーブル内の項目のみが返されます。これらは、アプリケーションにダウンロードする必要があります。スキャン操作は、最初のN個の一致する結果のみを探すようにバインドできますが、N個の結果を見つけるために必要なだけの読み取りスループットを使用します。 –