asatoの技術的な日常日記

「成長に最大の責任をもつ者は、本人であって組織ではない。自らと組織を成長させるためには何に集中すべきかを、自らに問わなければならない」  非営利組織の経営 - ピーター・ドラッカー

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Datastoreのデータモデル設計のふりかえり, パート4

はじめに


パート1パート2を読んでいない方は、この節を読んで下さい。

個人的に趣味で、Goole App Engine/Java(実際はScalaを使用)を使い始めて一年ぐらいになります。そこで、このシリーズでは、Datastoreのこれまでに設計したデータモデルについて少しふりかえりながら、
-設計上の失敗点
-データモデルのパターン(デザインパターンと言う意味ではない)
-データモデルの進化のパターン(プロパティの追加や削除など)
などについて考えていきたいと思っています。

基本的には、JDO使用で、一部、Objectifyを使ってます。

事例として作ってるWebサイトはGoodsHomeというもので、もともとは、新刊の定期自動チェックのために作ってました。今は、モノ(商品)を中心としてファンやユーザーがつながれるようなソーシャルなサイトにしようと思ってます。

現状、Kind数(クラス数)は、47でした。このシリーズでは、これらモデルの中から、単純なモデルから順に見ていきたいと思います。

考察


今回のパートで例にするモデルは、タグです。単に商品にタグを付けれる機能です。各商品に対してタグは10つまで付けられる仕様です。JDO使用です。
kind_Tags.png
TagsとTagの二つのKindがあります。Tagsは、ある商品に付けられたタグの一覧を保持するだけのものです。asinはamazonの商品IDを表します。Tagは個々のタグを表します。nameは、タグ名を、userIdは、このタグを付けたユーザーのIDを(ない場合もある)、dateはタグが付けられた日時を表します。

このモデルに対する操作は、以下です。
(a) エンティティの作成
(b) tagsの更新
(c) tagsの読み取り
(d) nameからasinリストの取得
kind_Tags_op.png



特徴は以下です。
(1) エンティティ間の関係がある。
(1.1) 1対n(one to many)の関係である。
(1.2) 双方向の関係である。
(2) トランザクションは必要である。タグ数の制約を満たす必要がある。
-Tags(Parent)
(3) tags以外の(JDO上の)プロパティがない。
(4) 各エンティティは、(特に理由がなければ設計上は)削除されない。
-Tag(Child)
(5) 各プロパティは、読み取り専用である。
(6) 各エンティティは、削除される。
(7) Tags(Parent)への関係をもつ。

下記の図は、上記のようなモデルをより一般的に表したものです。

ds_patten4.png


設計について


今回のモデルに限りませんが、設計する上で考慮の必要性が高いように思える順番は以下です。

(1) トランザクションの必要の有無。

(2) 性能。といっても、性能の測定や試験はほとんどしていません。

(3) クエリのやりやすさ。やりやすくなるようにプロパティを持たせます。

(4) 仕様変更への対応のしやすさ。個人的にはそれほど今のところ考慮して設計していませんが、何度かデータモデルの変更の必要性に出くわしました。変換作業は、結構面倒な印象があります。

(5) データ容量。データの重複をなくすることを優先しません。課金で対応します。たとえば、私の場合、現状、エンティティ数:10,480,242(1000万)、使用容量:12.03 of 15.00 GBytes、課金:$0.06 です。


パート5に続く。


付録:データモデルのパターン


パート1で特定したデータモデルのパターン
kind_patten1.png

パート2で特定したデータモデルのパターン
kind_patten2.png


パート3で特定したデータモデルのパターン
ds_patten3.png

パート4で特定したデータモデルのパターン
ds_patten4.png

スポンサーサイト

コメント

承認待ちコメント

このコメントは管理者の承認待ちです

  • 2012/11/03(土) 16:32:55 |
  • |
  • #
  • [ 編集]

承認待ちコメント

このコメントは管理者の承認待ちです

  • 2013/01/19(土) 18:13:23 |
  • |
  • #
  • [ 編集]

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://asatohan.blog77.fc2.com/tb.php/110-1598f717
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。