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


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


次回に続く。


スポンサーサイト

プログラミング:プログラマの基礎体力

吉岡さんの「プログラマの基礎体力」というブログ記事の一部に軽く反応。

まず、吉岡さんが次のように疑問を投げかけている(太字と省略は僕による)。

そもそも、プログラマの基礎体力ってなんだろう。学校でアルゴリズムの基礎を習うとか、プログラミング言語を習うとか、あるいはコンピュータの基礎を習うとかそういうことなのだろうか。

断片的な情報を獲得するのなら確かにインターネットや書籍でどうにかなる。しかし、職業プログラマとして一目置かれる存在になるための基礎体力ってなんだろう。

~省略~


そして、最後の結論にはこうある。


プログラマにとっての基礎体力はコードの読解力でそれを強化するのが重要であるというのが、本日のわたしの結論である。


これをもとに、僕の疑問。

(1)職業プログラマかどうかは重要? 

(2)「一目置かれる存在になるための基礎体力」と単なる他の「基礎体力」とは区別している? つまり、「一目置かれる存在になる」ことが目的で、そのための「基礎体力」なるものを議論しようとしているのか? 

(3)そもそも「一目置かれる存在」の定義は?

(4)「職業プログラマとして一目置かれる存在になるための基礎体力」とは何か? に対する結論が「コードの読解力」だとすると、「コードの読解力」があれば、「一目置かれる存在」になれるという話になる。だけど「コードの読解力」がないと「一目置かれる存在」にはなれないのか?

(5)そもそも「基礎体力」の定義がない気がする。その次にじゃあ「基礎体力は具体的に何か」という議論になる気がする。



たとえば、「基礎」という言葉には、次の意味がある。

(1)物事が成立する際に基本となるもの。
「―を固める」
(2)建築物の重量を支え、安定させるために設ける建物の最下部の構造。地形(じぎよう)・礎石・土台など。

Goo辞書より。


一つ目の定義に従うならば、プログラマ(プログラミング)の文脈で「物事が成立」とは何を意味するのか?


などなど疑問に思うのであった。

プログラミング:Spring-On-Rails

 Spring-On-Rails 1.0 Released (TheServerSide.com)

なんぞこれー。Spring-On-Rails かー。気になるところではある。

プロジェクトページによる説明。

Spring-On-Rails is a rapid Java Enterprise Application development Framework; It is a far distance cusin of Ruby-on-Rails. Spring-On-Rails is design to help developer to generate basic skelton of database CRUD type applications. Generated application is based upon SpringFramework, Ibatis and Hibernate for Java in middle tier.


プログラミング:Groovyでメタプログラミング

Groovyでメタプログラミングのコード例。

 The new meta-programming APIs in Groovy 1.1 beta 3

コピー&ペーストプログラミング

面白い記事。

 マイクロソフトによる講演「Windows Vista ゲーム開発」- 数多くの国内PCゲームが躓いたIME問題は、SDKサンプルのささいなバグだった!?

サンプルコードがバグってるのに、みんな気づかずにコピー&ペーストでプログラミングしていた、という話。

これに対する一つの反応は、コピペプログラミングはけしからん、というものかもしれない。しかし、コピペプログラミングは プログラミングの原則 の一つかもしれない。

ソフトウェア工学の観点からは、この課題にどう取り組めばいいだろう?


関連記事:
[CEDEC 2007]TSFにUAC。Windows Vistaベースのゲーム開発における「ちょっといい話」 (4Gamer.net)


更新履歴:
2007.10.02:関連記事へのリンクを追加。


Groovy でメタプログラミング

 Groovy got the best meta programming elements

Groovy は、全然さわってないけど、面白そうですなー。メタプログラミング体験として、そろそろ Groovy ってみるかなー。

プログラミング:Scala

メモドキュメント書きながら、久しぶりに Scala 触ってみた。

 Scala メモ

まだ慣れてないから、全然うまく書けそうにないけど。

Scala のパワーを試すために、今 Java で作ってるゲームを Scala でスクラッチで書き直して、開発上のどんな違いが出るのかを試す予定。

FC2Ad

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