3

私は開発しようとしているソーシャル ネットワーキング アプリを計画しています。私はすでに、SES、SimpleDB、DynamoDB、CloudFront、S3 などの多くの AWS サービスを使用した経験があります。私はいつでももっと学ぶことができます。

基本的にアプリでは、ステータスの更新があります。各ユーザーはアカウントを持っており、ステータスの更新にコメントするなど、独自のステータスの更新をアップロードできます。ユーザーは、過去 'x' 時間で最も気に入ったステータスの更新をチェックアウトしたり、データベース全体を検索してステータスの更新を見つけることもできます。ユーザー名を検索するか、ユーザーが作成時に指定する YouTube タグなどのステータス更新キーワードを検索します。

これが私の現在のスキーマです:

  • DynamoDB を使用して S3 ですべてのステータス更新キーを属性とともにホストし、範囲クエリを使用していいね、タイムスタンプ、
  • SimpleDB を使用して、クエリする属性を持つ S3 のすべてのアカウント キーとその他のキーをホストします。
  • Amazon S3 を使用して、すべてのアカウント データとステータス更新データをホストします
  • CloudFront を使用して S3 バケットのコンテンツを世界中に配布する

そのため、ユーザーが前日の最も気に入ったステータスの更新を確認したい場合、DynamoDB を範囲クエリして、24 時間のタイムスタンプ内で最も気に入ったステータスの更新を見つけます。ユーザーがステータス更新のタグを検索したい場合、DynamoDB には tags 属性とそのクエリがあります。しかし、DynamoDB は文字列をクエリできますか? 文字列が一致しているかどうかを確認しますか? 私はそうは思いません... DynamoDB をスキャンして、その形式に基づいてキーを個別に照合したくありません。命名規則には、内部に属性を含めることができます。たとえば、ステータス更新のキー名は次のようになります。

max:UploadedQuote:ijfi93nSNDiI:numberOfLikes="3499"

またはそのようなもの

これは、スキャンの制限が 10 MB であるためです。これは、平均的でアクティブなユーザー ベースではうまくいかない可能性があるためです。複数のリクエストを送信してアプリを肥大化させたくありません。ユーザーが誰かのアカウントを表示したい場合、SimpleDB でキーを見つけて S3 にロードします。

明らかに、特定のユーザーによるステータスの更新はアカウント オブジェクトに整理する必要がありますが、すべてのステータスの更新 (DynamoDB) を保持する別のオブジェクトが必要です。それ以外の場合は、データベース全体でユーザーにステータスの更新を検索させるにはどうすればよいでしょうか?

最も難しいのは、いいねやタグによるソートだと思います。どうにかして、DynamoDB のような高速でスケーラブルなデータベースが必要ですが、SimpleDB のようにクエリを実行できる必要があります。ただし、AWSのみを使用したいと考えています。AWS を使用する PanoPerfect というアプリを知っているので、これが可能であることはわかっています。それらは、私が計画しているものと非常によく似た機能を備えています。彼らのアーキテクチャはどのように機能するのだろうか。インスタグラムも!

明らかに、SimpleDB ですべてのステータス更新をホストする方が適切にクエリできるため、より理にかなっています。ただし、DynamoDB は高価になる可能性があります。

これにはより良いスキーマがありますか? この DynamoDB プロセスの代わりに CloudSearch を検索に使用する必要がありますか? CloudSearch は iOS で利用できますか? EC2はどうですか?それはどのように機能しますか?計画のこの段階で、AWS を使用してアプリケーションをどのように設計できるか、まったく確信が持てません。

助けてくれてありがとう!

4

1 に答える 1

1

Amazon の NoSQL データベースの 1 つを使用することに決めたようですね。機能しない場合は、使用しないでください。

私のアドバイスは、可能な限りシンプルなものを構築し、最初にユーザーを獲得することに集中することです。Twitter、Facebook、Ebay、その他すべてのトップ 1000 サイトは、通常のデータベースから始め、人気が出たときにスケーリングを心配していました。

スケーリングについて本当に心配している場合は、CouchDB、Cassandra、または Riak を調べてください。スケーリングのための単純なセマンティクスがあります。(複雑な手動のシャーディングを行う必要がある MongoDB や MySQL とは異なります。)

DynamoDB は文字列をクエリできますか? 文字列が一致しているかどうかを確認しますか?

プライマリ インデックスまたはセカンダリ インデックスに対してのみクエリを実行できます。タグをセカンダリ インデックスに射影できます。ただし、完全に一致するタグに対してのみクエリを実行できます。

CloudSearch は iOS で利用できますか? EC2はどうですか?

はい。すべてのサービスと同様に、これは Web API です。

それはどのように機能しますか?

それは実際にはスタック オーバーフローの問題ではありません

于 2013-05-07T03:08:50.073 に答える