私は開発しようとしているソーシャル ネットワーキング アプリを計画しています。私はすでに、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 を使用してアプリケーションをどのように設計できるか、まったく確信が持てません。
助けてくれてありがとう!