2012-02-20 7 views
0

トレーニングプロジェクトとして、私はAzureでファミリーツリーアプリケーションを構築しようとしています。NO SQLデータベースの設計

最初の手順はデータベースです。私はテーブルストレージを使用する予定です。

ファミリーツリーアプリケーションのテーブルストレージデザインはどのように見えますか?

私はいくつかの解決策を持っていますが、

  • 1人につき1つのエントリ、その人物のすべての関係を持つxml。しかし、それは与えられた変更と重複したデータのためにいくつかの行を更新することを意味します。
  • 情報の種類ごとに一つのテーブル、人のための1、関係1 ...しかし、これはちょうど私の最初の質問は、あなたが情報にアクセスすることを計画してくださいどのようになるリレーショナルデータベースのよう

答えて

1

私は一人一列のパーティションを構築したいので、パーティションキーは家族、行キーはその人の識別子です。それぞれの人には親の属性を入れます(通常は2つだけです:)。この方法で、パーティション全体を素早くメモリに読み込み、インメモリツリー構造を使用してグラフをトラバースすることができます。典型的な家族は100ノード以下でなければならないので、雷が激しくなります。更新は常にファミリに行われるため、各ファミリがパーティション内にあるときにトランザクションを使用できます。

実際に難しい(関連する)練習問題については、キー値ストア(テーブルストレージ)の上にグラフデータベース(ご家族のツリーなど)を実装してください。 TwitterやFacebookには、すべてのリレーションシップ(ソーシャルグラフ)のアップデート(つぶやき、ニュース)が必要な場所があります。その後、NoSQLの面白い(難しい)部分に取り掛かります。

1

を感じていますか?データにどのようにアクセスする必要があるのか​​を考えてみてください。私たちが過去20年間与えてきた正規化のルールを破ることを恥ずかしがります。冗長化された特殊モデルを採用また、箱から考えて、parrallelクエリの使用を検討してください。データが複数の場所に格納されている場合は、各場所を同時に追跡し、結果を集計します。

最後に、いくつかのデータを定義済みの表示形式で保存します。あなたのファミリーツリー情報は大部分が読まれているので、最適化された「ビュー」があります。たぶんあなたが表示したい人を見つけたら、そのデータをすべて見る準備ができているXMLファイルが1つあります。

1

ファミリツリーアプリケーションは、エンティティ自体よりもエンティティ間の関係に関係があることを考慮すると、これをリレーショナルデータベースでモデリングするほうが適しています。

私はこれをリリースしてもあなたの質問には答えませんが、その日の終わりには、タスクに最適なツールを選択する必要があります。