目的
クローリングしたデータがデータベースにすでに存在しているかどうか知りたい際に、
対照(select id from database where content like '%クローリングしたデータ%')で重複判断するのは効率が悪いため、
もっと効率が良い判断方法です。
流れ
1.クローリングされたデータをハッシュ(hash)化します。
そのハッシュは数字と英文字で組み合わせた文字列です。SHA-512バリエーションを使い、64ビットに拡張されています
2.ハッシュ文字列の列をユニークインディクスします。
3.クローリングした内容をハッシュする
mysql関数を使います
SHA2('My secret passphrase',512)
4.insert ignore into を使ってデータベースに追加します
insert ignore into (content,content_hash) values ('クローリングしたデータ',SHA2('クローリングしたデータ',512))
5.content_hashはユニークインディクスなので、重複があれば、エラーと判断し、重複したデータは無視(insert ignore into)で処理します。
スピードが速い、誤差が少ないことはメリットです。
参考
https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html#function_sha2
https://dev.mysql.com/doc/refman/8.0/en/insert.html