質問: 複数のページ(1,000URL程。URLの変更や数の増減も有)をクロールし、そのページ1つ1つのtitleが変更されたかどうかを知りたいと思っています。 この場合、データベース(MySQL5.7)にどのようなテーブルを作れば良いでしょうか? 仕組みとしては、前回のクロール結果と直近のクロール結果を比較するわけなので、データを登録するためのテーブルを2つ作れば良いかと考えました。 具体的には以下です。 ▼テーブル1 ページURL VARCHAR(2083) 主キー ページタイトル VARCHA(100) 日時 TIMESTAMP ▼テーブル2 ページURL VARCHAR(2083) 主キー ページタイトル VARCHA(100) 日時 TIMESTAMP クロールの度、古い方のテーブルに書き込み、もう一方と比較。titleの変更を見る、というやり方です。 ただしこれだと、主キーが長すぎて無駄に重くなってしまうと思います。 何かいい方法はないものでしょうか?
回答: > > ただしこれだと、主キーが長すぎて無駄に重くなってしまうと思います。 > > > 具体的に何を懸念されているかわかりません。 * 何が重くなると思われているのか。 * なぜ重くなると駄目なのか。 おそらくですがクローラーの場合、 DBへのアクセスよりHTTPなどネットワークのほうを懸念されたほうがいいと思います。 リアルタイムにずっと眺めているモノでもないでしょうし、多少遅くても問題ないかと。 またURLの変更された場合にテーブル1とテーブル2に主キーが違うので、 タイトルの変更を見れなくないですか? 2つのテーブルに分ける必要性がありますか。 個人的には、1つのテーブルに前回と今回のフィールド持つかたちで、例えば。 | カラム名 | 型 | 備考 | | --- | --- | --- | | ID | int | PK、サロゲートキー | | ページID | int | 比較したいページ毎のID | | 前回ページURL | text | | | 前回ページタイトル | varchar | | | 前回クロール日時 | timestamp | | | 今回ページURL | text | | | 今回ページタイトル | varchar | | | 今回クロール日時 | timestamp | | | 差分有無 | bool | (前回ページタイトル!=前回ページタイトル) |