人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

DB設計(MySQL)についての質問です。
現在、小規模(少なくとも当初は)な検索エンジンを作成予定なのですが、テーブル、カラム構成について、次の点で悩んでいます。
(テーブル構成はコメントを参照してください。)

1) cacheテーブルの「***_on」はurlテーブルに持たせるべきか?
(「***_interval」と「***_on」を元にクロール等するか決めるため)
2) cacheテーブルの「status」はurlテーブルに持たせるべきか?
3) urlテーブルの「***_interval」やcacheテーブルの「***_on」を別テーブルに分けるべきか?
4) もっと良い構成があれば教えてください。

(1)?(3)、あるいは(4)について、回答、アドバイスをいただければと思います。よろしくお願いします。

(初回のクロール等の後、「***_on」が「***_interval」を超えた場合に再クロール等を行う構成です。)


※ポイント配分にもよりますが、ベストアンサーがあれば最大200ptを送らせていただきます。

●質問者: zaxaxaz
●カテゴリ:ウェブ制作
✍キーワード:MySQL cache dB MySQL URL
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● ホーエンハイム
●100ポイント

cacheテーブルの方がurlテーブルより頻繁に更新されるという推測のもとに回答します。

1) cacheテーブルの「***_on」はurlテーブルに持たせるべきか?

cacheテーブルに持たせた方が良いと思います。

urlテーブルに持たせると、urlテーブルが頻繁に更新されることとなり、DBコストが高く付くからです


2) cacheテーブルの「status」はurlテーブルに持たせるべきか?

1)と同じ理由で、cacheテーブルに持たせた方が良いと思います。


3) urlテーブルの「***_interval」やcacheテーブルの「***_on」を別テーブルに分けるべきか?

別テーブルに分かる必要はないと思います。

別テーブルに分けると id で張るリンクが増えますので、DBコストが高く付くからです


4) もっと良い構成があれば教えてください。

urlテーブルのurlフィールドがvarchar(255)で足りるのでしょうか。

もし足りるのであれば、ISAMテーブルにするより、固定長テキストデータにした方がアクセス速度が速くなると思います。

◎質問者からの返答

ありがとうございます。

そうですね。ページの鮮度を保ちたいので、どちらかと言えばcacheテーブルのほうが頻繁に更新することになるかと思います。

urlフィールドは悩みどころなので長くするか、固定長テキストも検討したいと思います。

DBコスト面からのアドバイス、大変参考になりました。


2 ● ko8820
●100ポイント

正規化までできてるので、あとは運用と性能を考えて

非正規化するのが一般的な手法です。

1)正規化に反しますが、両方に持たせるべき

性能を考えて、cacheにも持たせる必要はあると思う。

2)これは、cacheテーブルだけでよい

3) おそらく、この2テーブル構成でなくてもう1,2テーブルを持つべき

urlはマスターテーブルとして設計

cacheはトランザクションテーブルとして設計

マスターテーブルは、電話帳みたいな役割で一回作成したら変更はほとんどしないほうが望ましい

cacheは、マスターテーブルの電話帳から電話をかけた結果の作業ファイルとして使用

これ以外に、トランザクションとして管理テーブルを2つほど作成すべきだと思う。

・ジョブ管理をするためのトランザクションテーブル(このあたりで、いつクロールさせるかとか登録する)

・404が発生した場合に、それを記憶するトランザクションテーブル

はじめての設計をやり抜くための本 概念モデリングからアプリケーション、データベース、アーキテクチャの設計まで (エンジニア道場)
4798117064

◎質問者からの返答

ありがとうございます。

テーブルを増やすことで、柔軟にスケーリングもできそうですね。

マスターテーブル、トランザクションテーブルという視点からのアドバイス、大変参考になりました。

紹介していただいた本も目を通してみたいと思います。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ