あさ◎別館

とりあえず何かを書いてみる別館・・・

2006年01月

2006年01月28日

血統DB設計の際の留意点など

不毛ですねえ。せめてあさ◎の中の人を引きずり込みたい(笑) (血統の森+はてな)

遅くなって申し訳ありませんでした(笑)。読ませてはいただいていたのですが、的外れなことを言っても混乱を招くだけですし、どういう風に参加したらいいものやらと考えておりました。

とりあえず、あさ◎DBで、血統DBを設計した時の手順や留意点、あとは簡単な構造などをまとめて見ましたので、参考になればと思います。オーソドックスな設計で、特別変わったことはしていません。重要そうな点については、下線を引いておきました。


◆基本的な設計

(1)I/O設計
・そもそもどこからどうやってデータを引っ張ってくるか?★

・想定するデータ数(テーブルの大きさ)
・全体のトラフィックとサーバ負荷(参照される回数、更新頻度)←おおざっぱでよい
・修正・削除をどうやって行なうか(血統の場合、修正は日常茶飯事)

(2)概念設計
・カバー対象(国内?海外?)
・項目 の範囲(ファミリーナンバーや種付け料までカバーするかどうか)
・系統をどうするか

(3)詳細設計
・テーブル設計(E‐RなりXMLなり)
・必須項目
・データ型
・非正規化(馬名重複、別名)

(4)運用
継続可能な更新方法
(飽きないで続けられるのが一番)


◆血統DB作成上の留意点

(1)不完全なツリー構造
・血統のデータは概念上はツリー型構造をしています。しかし厄介なのは実際には不完全なツリー構造にならざるを得ないだということです。最初から全サラブレッドの血統を埋め尽くすことができればいいのですが、そんなことはとうていできません(デルマですら上のほうは穴だらけ)。ツリーのどの位置に配置すればいいのかわからないデータが、相当な割合で生じます(あさ◎DBでは半分以上)。完璧なツリーが実際に完成することはほぼありえないので、あまりツリー構造のデータだと意識せずに設計した方がいいと思います。

繁殖馬にせよ競走馬にせよ、すべてが入力されたデータを想定するのではなく、最低限の情報しか入っていないデータを想定した方がいいです。生年月日がわからないor誤った馬が入力されることも十分ありえるので、プライマリキーに生年月日等の意味をもたせるのも危険だと思います(JRA-VANの繁殖馬データですら間違いはかなりあります)。

(2)スケーラビリティ
・JRA-VANの繁殖馬は100万頭くらいでしょうか。あさ◎DBですらおよそ60000頭くらいあり、4年目を迎えつつある現在でも1年で5000件ずつくらい増えています。ある程度の網羅性を得るにはかなり大きくなることを想定(最低15000〜20000頭くらい)しないといけないと思います。

(3)系統の持たせ方
・実は系統の持たせ方は、悩みました。現在、[出馬表]などで系統が表示されていますが、これは、

 「父が系統テーブルにデータのある種牡馬かどうかを調べる」→「父父を検索」→「父父父を検索」

という形で、系統を遡り、適当な系統が見つかるか、父の入力がないところまで繰り返します。従って表示処理が重くなり、実は24頭以上だと処理が落ちます(24頭以上の場合は系統を表示しないという形で対応中)。これを解決するには、Sire Tableで各繁殖馬に系統を持たせればいいのですが、これをやるにはプログラムを3本くらい書かなくてはいけない(例えば、新たな「系統」を切り出したときに、繁殖馬テーブル全体にそれを反映させるプログラム)のと、種牡馬ごとに系統を持たせると今度は種牡馬の新規登録・更新処理の方が重くなってしまう恐れがあったので、やめました。

ちなみに系統別の成績集計のプログラムは一応書きましたが、今のデータの持ち方ではまったく動きませんでした。系統別集計を用意するなら、繁殖馬ごとに系統を持たせないとまず無理だと思います。

(4)非正規化
・1件の繁殖馬データが父、母だけでなく、父父、父母、母父、母母・・・と遡ったデータを持つような設計を「非正規化」といいます。 更新の処理が不必要に重くなり、かつデータの整合性が取れなくなる原因になるので、基本的には反則なのですが、表示上やむを得ない場合(ex.参照される回数は多いのに、DBが大きすぎる場合)のみ、行なわれます。この辺参照。

血統DBでは、絶えずデータが更新・修正されるのですが、表示のためにDBを過度に非正規化し、各馬について5代前までの血統を全部持たせると、更新・修正処理が重くなります。たとえば新たに「サンデーサイレンスの父ヘイロー」が新たに入力された時に、SSの血を持つ繁殖馬すべてについて更新を行なわなくてはならなくなります。

(5)XMLDB or RDBMS?
この辺にあるように、一般にXMLDBの長所は「データ構造を運用中に変更することが容易」という点にあると思います。RDBのテーブルAlterは、システム全般に影響を与えるクリティカルマターになりますが、XMLではそんなことはありません。その一方で、「リレーショナルデータベースにおけるSQLのような統一規格が(まだ)ない」、「(今のところ)パフォーマンス上問題がある」という欠点があります。

血統関係のデータは性質上データが頻繁に変更されることがないですし、規模も大きいので基本的にはRDB向きだと思います。ただ、別に仕事でやるわけじゃないですし、極端な話失敗しても構わないのですから、XMLでやったらどうなるのかというのを試したいというのであれば全然やっちゃってもいいとおもいます。使いたくもない技術では、モチベーションも保てないというものです(笑)


◆あさ◎DBの血統関係のデータ構造

特に変則的なことはしていません。

<繁殖テーブル(Sire Table)>
繁殖馬ID (必須)
馬名 (必須)
英語名
日本語名

生年
父(繁殖馬ID)
母(繁殖馬ID)
毛色
産国 (国ID)
供用国 (日本のみフラグ、馬名表示のコントロール用)

・トランザクションマスタ。新規登録はオン・バッチあわせて60頭/週程度。
・件数は約75000件
・必須項目は2つのみ。なお、「日本語名」か「英語名」のどちらかには必ず値が入ります。
・「馬名」は持っていますが、これは検索用で表示用には使ってません。何故こうなってしまうかというと、↓の問題のせいです。
「重複」(ex.Brian's Timeとブライアンズタイム)、「同名」(ex.Bold Lad1とBold Lad2)が非常に厄介になると思います。
・空欄ばかりになってしまう項目を持ってもしょうがないと思ったので、最低限の項目しか持っていません。
・「牧場」や「種付け料」なども一度は考えましたが、トレースするのがあまりに大変なので、やめました。

<現役馬テーブル(Horseinfo Table)>
現役馬ID(必須)
馬名(必須)
日本語名
英語名

生年
父(繁殖馬ID)
母(繁殖馬ID)
毛色
産国(国ID)
厩舎(厩舎ID)
オーナー(不使用)

・トランザクションマスタ。新規登録は20頭/週程度。
・件数は約7000件
・Sireと似てますが、明確に分けてます。
・「馬名」については繁殖馬と同じ(ハリウッドオークスの"Cesario"と日本で走るシーザリオは別のデータとしてDBに入ってくる)。
・理由は概念的に異なるエンティティなのでわけないとごちゃごちゃになるのと、SireTableは現役馬の10倍以上大きいので、分けないと負荷がかかるからです。これはJRA-VanやJSEさんも分けてらっしゃると思います。

<系統テーブル(Sire Line Table)>
系統ID(必須)
系統名(必須)
小系統(必須)(繁殖馬ID)
大系統(必須)(繁殖馬ID)
大系統フラグ


・純然たるマスタテーブル。ほとんど内容が更新されることはない。
・件数は約130件
・これわけわからないと思いますが、 小系統はHaloやStorm Catなどある程度細分された系統です。これに対し、大系統はHerodとかNorthern Dancerといったおおざっぱな系統です。各馬の系統は、小系統によって表示し、大系統によって色分けしています。
この図を見たらわかりやすいかもしれません。


質問や何かわからないことがありましたら、遠慮なくお願いします。たいして参考になるようなことは言えないと思いますが、自分のスキル上、あるいは経験上わかる範囲でお答えします(^^;

 

◆Track Back用リンク
http://d.hatena.ne.jp/momdo/20060127
http://d.hatena.ne.jp/arikui/20060128

2006年01月08日

アメリカ騎手リーディング2005

名前 名前 生年 地域     2005 Stats       05         Stats   過去の順位 賞金   ひとこと
    Jockey Name # Starts 出身 1着 2着 3着 勝率 複勝率 賞金 昨年比 05 04 03 02 2005 2004 2003 2002  
1 John R. Velazquez ジョン・ヴェラスケス 1971 34     John R. Velazquez 1 1137 プエルトリコ 251 177 146 22.0% 50% 24,399,923 2,151,262 1 1 3 3 $24,399,923 $22,248,661 $16,625,501 $16,361,445 0 史上最高賞金。厩舎の好調と相乗効果
2 Edgar S. Prado エドガー・プラード 1967 38     Edgar S. Prado 2 1455 ペルー 299 227 206 20.0% 50% 18,615,366 273,260 2 2 2 2 $18,615,366 $18,342,106 $18,475,582 $18,024,429 0 東海岸リーディング常連。05年BC初制覇するとともに、2勝を挙げた。
3 Jerry D. Bailey ジェリー・ベイリー 1957 48     Jerry D. Bailey 3 654 アメリカ 169 103 91 26.0% 56% 18,297,384 2,593,540 3 4 1 1 $18,297,384 $15,703,844 $23,354,960 $22,871,814 -1 全米ナンバーワン騎手。昨年、怪我で離脱した分の成績を回復。引退を示唆。
4 Rafael Bejarano ラファエル・ベハラノ 1982 23 東・中     Rafael Bejarano 4 1341 ペルー 263 255 204 19.0% 54% 14,427,541 2,217,454 4 8 44 $14,427,541 $12,210,087 $4,912,559 #N/A -4 KY→NY移籍でトップジョッキーに。KYでもリーディング
5 Garrett K. Gomez ギャレット・ゴメス 1972 33 西     Garrett K. Gomez 5 1268 アメリカ 245 211 177 19.0% 49% 14,221,321 5 50 $14,221,321 #N/A #N/A $4,510,527 #VALUE! 薬物によるブランクを克服、離脱前より浮上。得意のハリウッドで台頭した
6 Javier Castellano ハビエル・カステラーノ 1977 28     Javier Castellano 6 1155 ベネズエラ 206 188 177 18.0% 49% 12,507,012 -531,931 6 6 15 16 $12,507,012 $13,038,943 $9,558,978 $8,819,053 0 Ghostzapper、Bellamy Roadでシーズン前半は好調も後半はやや失速
7 Victor Espinoza ヴィクター・エスピノーザ 1972 33 西     Victor Espinoza 7 1077 メキシコ 192 182 161 17.0% 48% 12,054,776 -3,878,981 7 3 14 6 $12,054,776 $15,933,757 $10,004,495 $12,590,646 4 勝利数は増加するも、騎乗馬の質低下でG1勝てず、賞金減。
8 Patrick A. Valenzuela パトリック・ヴァレンズエラ 1962 43 西     Patrick A. Valenzuela 8 979 アメリカ 202 196 144 20.0% 54% 11,794,244 8 5 7 $11,794,244 #N/A $15,697,352 $12,544,098 #VALUE! 西海岸のトップ騎手。薬物問題による1年のブランクをものともせずトップを維持。
9 Cornelio H. Velasquez コーネリオ・ヴェラスケス 1968 37     Cornelio H. Velasquez 9 1396 パナマ 216 217 200 15.0% 43% 11,430,591 331,902 9 11 13 20 $11,430,591 $11,098,689 $10,577,491 $8,483,039 -2 例年並。Pleasant HomeでBC制覇
10 Ramon A. Dominguez ラモン・ドミンゲス 1976 29 東・南     Ramon A. Dominguez 10 1210 ベネズエラ 312 230 182 26.0% 59% 10,767,955 -739,934 10 10 8 27 $10,767,955 $11,507,889 $11,359,767 $6,689,408 0 相変わらず勝利数多い。秋以降フロリダからNYへ本格参戦
11 Robby Albarado ロビー・アルバラード 1973 32 中・南     Robby Albarado 11 1135 アメリカ 204 203 178 17.0% 50% 10,717,254 346,081 11 14 11 12 $10,717,254 $10,371,173 $11,061,314 $10,181,703 -3 KY州のトップ騎手も、得意はフェアグラウンズ。今年6度目のリーディング
12 Corey S. Nakatani コーリー・ナカタニ 1970 35 西     Corey S. Nakatani 12 751 アメリカ 142 143 99 19.0% 50% 9,856,882 -2,609,675 12 7 17 28 $9,856,882 $12,466,557 $8,518,363 $6,461,478 5 長期(30日)の騎乗停止と有力馬の故障が響いた
13 Eibar Coa エイバー・コア 1971 34 南・東     Eibar Coa 13 1319 ベネズエラ 206 190 177 15.0% 43% 9,692,193 1,892,685 13 22 19 15 $9,692,193 $7,799,508 $8,274,672 $9,074,284 -9 急成長。フロリダからNYに移籍。ベルモントでリーディング争い
14 Alex O. Solis アレックス・ソリス 1964 41 西     Alex O. Solis 14 710 パナマ 153 128 104 21.0% 53% 9,647,743 -1,907,108 14 9 4 8 $9,647,743 $11,554,851 $16,304,252 $12,027,315 5 昨年、落馬で全治半年の大怪我。3月から復帰。
15 Gary L. Stevens ゲーリー・スティーヴンス 1963 42 西     Gary L. Stevens 15 487 アメリカ 94 62 79 19.0% 48% 9,246,385 5,277,755 15 57 35 57 $9,246,385 $3,968,630 $5,829,570 $4,205,946 -42 昨秋欧州から復帰し活躍。5000勝達成も、怪我もあり、引退。
16 Shaun Bridgmohan ショーン・ブリッジモハーン 1979 26     Shaun Bridgmohan 16 1276 ジャマイカ 247 211 179 19.0% 49% 7,703,566 610,142 16 26 25 17 $7,703,566 $7,093,424 $6,765,343 $8,727,436 -10 NYからアーリントンに遠征し、リーディング獲得。Douglasの抜けた穴を埋める
17 Tyler Baze タイラー・ベイズ 1982 23 西     Tyler Baze 17 1085 アメリカ 138 139 138 12.0% 37% 7,693,926 -2,487,206 17 15 22 69 $7,693,926 $10,181,132 $7,518,061 $3,799,500 2 若手のホープも、体重減に苦しみ、下半期急降下
18 Mark Guidry マーク・ギドリー 1959 46 中・西     Mark Guidry 18 817 アメリカ 177 120 103 22.0% 49% 7,679,679 3,779,066 18 58 46 26 $7,679,679 $3,900,613 $4,763,739 $6,933,474 -40 大躍進。前半、加州に行く。アーリントンで4度目のリーディング獲得し、KYに戻る
19 Eddie Castro エディー・カストロ 1984 21     Eddie Castro 19 1568 パナマ 329 282 248 20.0% 52% 7,498,546 1,388,708 19 28 59 $7,498,546 $6,109,838 $3,931,877 #N/A -9 フロリダのトップジョッキーで早くも2000勝達成。6月にコールダーで1日9勝
20 Jose A. Santos ホセ・サントス 1961 44     Jose A. Santos 20 816 チリ 113 124 104 13.0% 41% 7,329,799 -272,044 20 23 7 9 $7,329,799 $7,601,843 $11,472,287 $11,917,955 -3 Funny Cide主戦も、ここ2年は若手の突き上げを食ってる印象
21 Russell A. Baze ラッセル・ベイズ 1958 47 西     Russell A. Baze 21 1216 カナダ 375 247 173 30.0% 64% 7,300,789 1,528,849 21 33 24 22 $7,300,789 $5,771,940 $6,917,825 $7,346,246 -12 9000勝達成。落馬・骨折もあって、例年ほど数は勝てずも、Lost in the Fogで賞金稼ぐ
22 Jon Kenton Court ジョン・ケントン・コート 1960 45 西     Jon Kenton Court 22 955 アメリカ 135 111 141 14.0% 40% 7,247,741 2,641,143 22 41 57 30 $7,247,741 $4,606,598 $3,965,598 $6,078,225 -19 昨年西海岸に移籍、確固たる地位を確保しつつある。
23 Jeremy Rose ジェレミー・ローズ 1979 26     Jeremy Rose 23 812 アメリカ 178 139 114 22.0% 53% 6,972,553 2,421,636 23 42 50 24 $6,972,553 $4,550,917 $4,516,749 $7,299,429 -19 01年最優秀見習騎手。Afleet Alexで2冠。メリーランド、デラウェア、オークローン等で騎乗。
24 Manoel R. Cruz マノエル・クルーズ 1970 35     Manoel R. Cruz 24 1678 ブラジル 322 280 247 19.0% 51% 6,813,500 2,661,684 24 52 38 55 $6,813,500 $4,151,816 $5,353,375 $4,271,654 -28 元ブラジルのトップ騎手。フロリダで活躍し、Castroとリーディングを争うなど、躍進。
25 Mike E. Smith マイク・スミス 1965 40 西     Mike E. Smith 25 619 メキシコ 81 77 76 13.0% 37% 6,520,617 -1,343,325 25 21 18 11 $6,520,617 $7,863,942 $8,401,045 $10,807,977 4 かつての全米リーディング。Giacomoでダービー制覇するも全体としては低調
26 Joe Bravo ホセ・ブラーヴォ 1971 34     Joe Bravo 26