4

まず、私はRDBMS / SQL / C ++ / Java / Pythonのバックグラウンドを持っており、
Gaelyk、Google API、Googleデータストアの初心者です。

コードを作成する前に、(コードのフローチャートとデータベースのDBモデリングツールを使用して)モデル化するのが
好きです。
私は過去にErwinを多用してDBモデリングを行ってきました。


Erwinでは、GoogleデータストアとGaelykをGoogle AppEngine SDKで使用して、実装し たいデータベースの論理/物理データモデルを設計しました。

何かをコーディングする前に、データレイアウトを設計したかったのです。
私が選んだデザインツールはErwinDataModelerです。

Googleデータストアを見ると、
リレーショナル制約がなく、結合は
WHERE句:bind変数を介して行われていることがわかりました。

既存のモデル(PK / FK、依存エンティティ、重いリレーショナルリンクを含む)をGoogleデータストアにマッピングするにはどうすればよいですか?

Googleデータストアのデザインを可能にするモデリングツールはありますか?
DB設計はGaelykMVCパターンと直接コーディングから流れることになっていますか?
私はRDBMSのバックグラウンドを持っているので、これには慣れていません。RDBMSのバックグラウンドでは、モデルを多用
し、すべての優れたものは優れたリレーショナル設計から生まれます。

また、命令型言語(C ++、C、Java、Python)でデータベースクライアントアプリをコーディングする前に、
擬似コードを書くのが好きですが、何よりもまずDB設計が必要です(アプリ
にDBバックエンドがある場合)

私はこれをすべて間違っていますか?
コーディングを開始するために 利用できるツールのセットがあるように見えますが、デザインツールセットはありません。

補遺:
これが私がマッピングしようとしている論理モデルですモデル

循環関係
アカウント-(1:m)-following-(m:1)-following_account_id-(1:1)-account_idをどのようにマップしますか?

4

1 に答える 1

9

一般に、App Engineデータストア(およびすべての非リレーショナルデータベース)の基本原則は、「読み取りを最適化する」ことです。要するに、それは非正規化、非正規化、非正規化を意味します。場合によっては、更新が難しくなります(たとえば、ユーザー名をアカウントテーブルの主キーにし、ユーザーがユーザー名を変更したい場合)。場合によっては、永続的なカウントの保存など、データの複製が必要になります。ただし、読み取りのパフォーマンスとスケーラビリティが大幅に向上し、一般的なWebアプリでは、読み取り数が書き込み数を数百から1倍上回るため、これらすべてに価値があります。

特にモデルを見ると、非常に正規化されています。これまでに見たほとんどのRDBMSモデルよりもさらに正規化されています。いくつかの提案:

  • 'user_name_id'などをメインアカウントテーブルにロールアップします。
  • 'following'のようなものについては、誰かがフォローする人の数が通常少ない(<1000)場合はlistプロパティを使用し、そうでない場合はファンアウトパターンを使用します。
  • ユーザー名や電子メールなど、実用的な場合は各テーブルに適切な主キーを選択し、それをキー名として使用します。これにより、クエリの代わりにget操作を使用してレコードを検索できます。これは大幅に高速です。
  • 'account type'などのルックアップテーブルが必要な場合は、外部キーが十分に説明的であることを確認してください。管理アクションのために対応するレコードをルックアップするだけで済みます。すぐにアクセスできるように、このように頻繁に変更されない小さな詳細をデータストアの外部に保存することをお勧めします。
  • タグなどの場合は、リストプロパティを使用して、関連するエンティティを検索する回数を減らし、インデックス作成を容易にします。

もちろん、これは表面を傷つけるだけであり、ここSO、グループ、および私のようなブログには、収集された多くの知恵があります。遠慮なく戻ってきて、データモデリングについて具体的な質問をしてください!

他の質問に答えるために、いいえ、私が知っているGAE固有のデータモデリングツールはありませんが、すでに使用している標準のダイアグラム作成ツールを使用できます。データストアはスキーマレスであるため、モデルは実際にコードで定義されますが、それが実装の順序に対する障壁である必要はありません。

于 2011-08-10T00:04:43.803 に答える