私はいくつかの関連するエンティティを持つGAE上で動作するシステムで作業していますが、データを保存する最良の方法がわかりません。この投稿は、類似の経験を持つ可能性のある他の人からのアドバイスのリクエストです。Google App Engineの非正規化アドバイスを探しています
システムには、プロフィールデータと画像を持つユーザーがいます。これらのユーザーは「イベント」を作成し、ジャーナルエントリを追加することができます。システムの目的上、「イベント」には1つまたは2つのジャーナルエントリがあり、10を超えるものは決して発生しない可能性があります。他のユーザーは、ユーザーのエントリにもコメントを追加することができます。人気のあるユーザーは、数百または数千のコメントを持つことがあります。ランダムな訪問者がシステムを使用すると、最新のイベント(最近のジャーナルエントリを持つ人によって定義された最新のイベント)を表示し、タグで検索し、基本的なテキスト検索を実行できます。次に、表示するイベントを選択すると、すべてのジャーナル・エントリとすべてのユーザー・コメントと、コメントの横にユーザー・イメージが表示されます。ユーザーは、自分のイベントを表示/変更/削除し、他のイベントで行ったコメントを表示/変更/削除するための自己管理ページも用意しておく必要があります。したがって、通常のRDBMS上でこれを行うと、いくつかのテーブルで大きな結合が行われただけでクエリが実行されます。 GAEでは、明らかに異なる方法で作業する必要があります。 - ID、名前、timstamp、タグのリスト プロパティ、ビュー数、 作成者のユーザ名、作成者のプロフィール 画像ID、ジャーナル項目の数
- イベントエンティティ:ここでは、エンティティの設計上の私の最初の考えがあります それが含まれている、それが含まれている総コメント の数、検索のための含まれている仕訳、索引語のリストプロパティへの最後の更新のタイムスタンプ(組み込み/含まれている仕訳からのテキストから更新)
- JournalEntryエンティティ - タイムスタンプ、 ジャーナルテキスト、イベント名、 作成者のユーザ名、作成者のプロフィール電子 画像ID、(コメント投稿ユーザ名と 画像IDを含む)、コメント
- Userエンティティのリストプロパティ - ユーザ名、パスワードのハッシュ、電子メール、サブスクライブされたイベントのリストプロパティ、作成日時、画像ID、投稿されたコメントの数のタイムスタンプ、作成されたイベントの数、作成されたジャーナルエントリの数、最後のジャーナルアクティビティのタイムスタンプ
- UserCommentエンティティ - ユーザー名、イベントのID、コメントのタイトル、コメントのタイトル
- TagDataエンティティタグ名、タグ付きイベントの数それらの上に
だから、私は私はここで人々がデザインについて考えていること、そしてそれがうまく拡大するのを助けるために何が変わるべきかを聞いています。ありがとう!プロパティとして
dfichter、素晴らしいアドバイスありがとう、それはまさに私が得ることを望んでいたものです。 あなたの質問に答えてもらえれば、私はそれらがなくても管理できると確信しています。それでもなお、彼らをあきらめなければならないのはちょっと残念です。あなたはそうだが、単一の操作を完了させるために多くの別々のトランザクションを作成しなければならないことは過度である。私はmemcacheにすべてを載せても大丈夫ですが、いつでも消えてしまうので、本当にそこにいることは期待できません。これは他の人が解決した共通の問題ですか? – user605331
...私はdfichterの回答を「答え」としてマークしていますが、もちろん私のアドバイスを求めても実際の答えはありません。 – user605331
@ user605331確かに、パターンは:値が必要なときにmemcacheでチェックし、そこになければゼロから計算し、キャッシュして使用します。値に影響を与えるデータストアの書き込みを行うときは、memcacheの値を更新してください。ゼロからの計算は高価ですが、うまくいけば頻繁に起こることはありません。それについてのガイダンスがあります。[http://stackoverflow.com/questions/421751/whats-the-best-way-to-count-results-in -gql/4918133#4918133)。 – dfichter