asatoの技術的な日常日記

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

スポンサーサイト

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

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

はじめに


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

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

事例


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

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

まずは、NewItemというモデルです。これは、商品が新たに見つかった時の情報を表すモデルです。新たな商品データがあるかどうかは、タスクを使って定期チェックされます。

kind_NewItem.png

図のPKは、プライマリキーのことです。PKの値はasinで、これは、amazonの商品IDです。categoryは、商品のカテゴリ(書籍やおもちゃなど)を表しています。dateは、見つかった日時を表します。ちなみに、152,000のエンティティがあります。

モデルに対する操作は、二つです。
(a) エンティティの作成
(b) カテゴリごとに新着順にエンティティの読み取り(select from NewItem where category == '%s' order by date desc)。

特徴は以下です。
(1) 他のエンティティへの関係を持たない(Key経由でも持たない)。
(2) 各プロパティは、読み取り専用である。
(3) 各エンティティは、(特に理由がなければ設計上は)削除されない。
(4) トランザクションは不要である。

上記の図と同じですが、下記の図では、プロパティが読み取り専用という点を強調してみました。
kind_NewItem2.png

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

kind_patten1.png


さて、何らかの設計ミスを感じているかどうかですが、それは、他のモデルの紹介時にまた考えたいと思います。


次回に続く。


スポンサーサイト

コメント

コメントの投稿


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

トラックバック

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

FC2Ad

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