2011-02-04 1 views
4

私のコードは約1000個のHTMLファイルを取り出し、関連する情報を抽出します。&は、その情報をMySQL TEXTフィールドに格納します(通常はかなり長いので)。私はDBの重複エントリを防ぐシステムを探していますMYSQL/PHPの重複したTEXTフィールドをチェックする最良の方法は何ですか?

私の最初のアイデアは、テーブル(おそらくMD5)にハッシュフィールドを追加し、各実行の開始時にハッシュリストを引くことです&挿入前に重複をチェックしてくださいDBに格納する。

2番目のアイデアは、ファイルの長さ(バイトまたは文字など)を保存し、重複するファイル長を確認するために&のインデックスを確認し、重複する長さが見つかると内容をダブルチェックします。

パフォーマンスに関するベストソリューションは何もわかりません。おそらくもっと良い方法がありますか?

ファイルが95%以上類似しているかどうかを確認する効率的な方法がある場合は、理想的でしょうが、私はそこに疑問がありますか?

ありがとうございました!

ところで

私はPHP5を使用しています/ Kohanaの


編集:私は、各

などの発生を記録&すべての英数字を数えることができる:ちょうど類似性のチェックのアイデアを持っていた

:17aB ... = 1a、7b、10c、27c、...

チャンクカウントの上限になる可能性があります(約61?)

偽陽性は依然として稀であると思います。 。 。

良いアイデア/悪いアイデア?

+0

ハッシュは、英数字の発生よりも衝突が少なくなります。より衝突耐性の高いハッシュが必要な場合は、sha1を使用してください。悪いシステムを改革するためにあなたの時間を無駄にしないでください。 –

+0

はいこれは私が最終的に決めたものです – jisaacstone

答えて

2

おそらくハッシュのアイデアが最適です。衝突があるかもしれませんが、非常に稀です。

ハッシュフィールドをテーブルの一意のキーにして、重複したエラーコードをキャッチします。または、insert ignoreまたはinsert replaceを使用してください。

0

それはかなり良いと思う、私は似たようなものを実装している。重複は許されないので、ハッシュフィールドはキーでなければなりません。

各テキストレコードが長い場合は、レコードごとに定数倍数(たとえば2)を計算できます。おそらくそれらのうちの1つだけが同一であれば、それは十分に近いです。明らかに、レコードごとにハッシュが多いほど、全文の比較に近づきます。

MD5は16バイトです。時間の経過と共に潜在的なハッシュの数はいくらですか?この数値が合理的なままであれば、メモリ内での比較は大丈夫です。

+0

一度に100,000を超えるアクティブなエントリがありません。 KohanaのORMの制限のキーb/cとしてハッシュを使用することはできません。おそらくBryonが提案したように 'insert replace'を使うでしょう。 – jisaacstone

関連する問題