2016-08-06 6 views
0

これはAndroidコンテキストのものです。私はAmazon Web Serviceのsdkを使って基本的なソーシャルメディア機能を持つAndroidアプリを開発しています。ユーザー、投稿、その他のデータなどを保存する必要があります。このような構造を考えています。AWSのDyanomoDBをユーザーアカウント用に構成する最も良い方法は?

「ユーザー」と呼ばれる、ユーザーごとのアイテムを含む1つの大きなテーブル。そして、すべての投稿と雑多なデータを保存する各ユーザーのための多くの属性を持っています。

しかし、私はこのことをどのようにして構造化すべきかについて、他の意見を聞きたいと思います。私は本質的にこのようなことの経験がないので、私は助けができないが、私はこの間違いを起こすと思う。

ありがとうございました

答えて

2

あなたのデザインについては、複数の方法があります。信頼性とスケーラビリティのある設計を導き出すために、システムの使用パターンを考慮する必要があります。

同じ表のユーザー情報と投稿を混同しません。代わりに、ユーザーの電子メールアドレス、固有のアカウントID、または他の代理固有のキーなど、多分何らかの識別子によって識別されるユーザーの表があります。このテーブルには、ユーザーに関するメタデータを保存しても問題ありません。それから私は別のテーブルを作成します。投稿はユーザーIDで区切られ、タイムスタンプでソートされます。最近の投稿を取得できるようにするために、日付のようなもう少し粗い時間属性を持つことを検討し、日時による投稿のインデックスを付けるGSIを作成することも考えられます。多くの投稿がある場合、これの粒度は時間単位でもあります。

あなたはについて考え始める必要があります。

  • あなたが持っていることを期待しますどのように多くのユーザー - あなたが持っていることを期待しますどのように多くの毎日のアクティブユーザー数百、数千、数百万人
  • を持っているのだろうか?
  • 一般的なユーザーはいくつの投稿を作成しますか?
  • 投稿はその日に広がりますか、それとも一緒にクラスタ化されますか
  • あなたにとって最も重要な点は何ですか?速いメッセージの配信/取得?信頼性の高いメッセージ配信/検索?オンライン/オフラインメッセージ配信?
  • グループ投稿のサポートが必要ですか(つまり、同じスレッドで共同作業する複数のユーザー)

幸運!

+0

有益なコメントありがとうございました!私は今考えるべきことがたくさんある。私は別のフォーラムでこの質問をしました。ほとんどの人はDynamoDBデータベースの代わりにAmazonのリレーショナルデータベースサービスの使用を推奨していました。それについての考えは? – theRealOne

+0

私は自分の答えに含める質問に答える必要があると思います。非リレーショナル(NoSQL)データベース、DynamoDBが含まれていますが、他のもの(例えば、水平スケーリング、高可用性)が優れているのに対し、リレーショナルデータベースはいくつかの点でより優れています(複雑な結合、複数のテーブルにわたるトランザクション)。あなたのユースケースと目標について –

+0

さて、ありがとう! – theRealOne