5

私はモバイル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つのユーザーアカウントに格納するためのデータセットがより組織化され、それほど大きくありません。

    あなたはどう思いますか?

    ありがとうございました!私はこれに恩恵をかけ、本当に答えが必要です。

  • +0

    ありがとう:1. DynamoDBのクエリ操作を持っている、それだけでRangeKeyを使用する必要があります。 2.スキャン操作では、テーブル全体でデータを検索できますが、テーブル全体をダウンロードする必要はありません。 3. SimpleDBは、ドメインが作成されたのと同じリージョン内に冗長なレプリカを持っています。データベースのCDNのように動作しません。 –

    +0

    @BobKinneyテーブル全体を通してデータを見つけることができますが、ダウンロードする必要はありません。 – MCKapur

    +0

    私が言ったことを正確に意味します。スキャン操作では、DynamoDBテーブルのすべてのデータがスキャンされ、スキャンパラメータと一致するテーブル内の項目のみが返されます。これらは、アプリケーションにダウンロードする必要があります。スキャン操作は、最初のN個の一致する結果のみを探すようにバインドできますが、N個の結果を見つけるために必要なだけの読み取りスループットを使用します。 –

    答えて

    6

    うわー!どのような質問:)

    [OK]を、いくつかの側面を議論することができます:あなたは上場キーのプレフィックスを追加していないよう

    S3

    S3パフォーマンスが低い可能性が高いです。

    type/owner/idのようなオブジェクトを保存してシャーディングする場合、特定の所有者(タイプ/所有者/の接頭辞)のすべてのIDをリストするのが高速になります。少なくとも、すべてを一度に一覧表示するよりも高速です。

    一般的にはSimpleDBの

    対ダイナモ、私のアドバイスのthats:

    • SimpleDBの使用:あなたのエンティティストレージはあなた

    • 10ギガバイトの上を通過するつもりはない

      • 複数のフィールドを含む複雑なクエリを適用する必要があります
      • あなたの質問あなたのエンティティストレージは/あなたが需要を拡大したい10ギガバイト
      • を渡します

        • :IESはよくするときは、多値データの種類
      • 使用DynamoDBのから利用することができます

      • を定義していませんスループットはそのままです
      • クエリとモデルは明確に定義されており、変更される可能性は低いです。
      • あなたのモデルは、あなたがあなたのクライアント側でクエリをキャッシュすることができ緩いスキーマ
      • を含む、動的である(あなたが前ダイナモにキャッシュを照会することにより、スループットを節約することができます)
      • あなたが集約/ロールアップをしたいです原子更新
    を使用して、要約、

    は、あなたの現在の記述を考えると、SimpleDBには、以来、実際には優れているようだ: - あなたのモデルは完全に 定義されていない - それがかかるのであなたは、いくつかの意思決定の側面を延期することができますしばらくして(10G iB)の制限

    地理SimpleDB

    サポートしていません。それは私たちの東1アフリカだけから働く。あなたは、ハッシュ+レンジキーを使用することができますたび:これはダイナモに最も当てはまる

    命名

    キー。accountid:image で始まるaccountid:
  • 一覧表T上のすべての私の記録を開始し、テーブルT上のすべての私のレコードを

    • リスト:しかし、あなたはまた、ハッシュを使用してキーを作成し、同様に、いくつかのクエリを適用することができ

      ただし、スキャンはまったくありません。それを念頭に置いてください。

      (概要については、これを参照してください。http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/API_Scan.html

      ボーナストラック

      は、Javaを使用している場合は、Mavenの中央に曇ったデータは、S3へのBlobフィールドをマップするためにいくつかの拡張機能でSimpleJPAを含んでいます。だから、それに一見を与える:

      http://bitbucket.org/ingenieux/cloudy

      は、明確化のためにノートだけのカップルあなたに

  • +0

    ありがとう!非常に安心 – MCKapur

    関連する問題