Pengiraan Jarak Hamming dalam SQL untuk Rentetan Binari
Cabaran timbul dengan mencari kaedah yang cekap untuk mengira jarak Hamming antara cincang SHA256 yang disimpan dalam lajur BINARI(32). Pendekatan mudah untuk memecahkan rentetan binari kepada subrentetan, menghantarnya kepada integer dan melakukan pengiraan jarak Hamming mengikut subrentetan nampaknya menyusahkan dan tidak cekap.
Walau bagaimanapun, terdapat penyelesaian alternatif yang meningkatkan prestasi dengan ketara. Dengan menyimpan cincang dalam empat lajur BIGINT, setiap satu mengandungi subrentetan 8-bait data asal, ia menjadi mungkin untuk menggunakan fungsi berikut:
<code class="sql">CREATE FUNCTION HAMMINGDISTANCE( A0 BIGINT, A1 BIGINT, A2 BIGINT, A3 BIGINT, B0 BIGINT, B1 BIGINT, B2 BIGINT, B3 BIGINT ) RETURNS INT DETERMINISTIC RETURN BIT_COUNT(A0 ^ B0) + BIT_COUNT(A1 ^ B1) + BIT_COUNT(A2 ^ B2) + BIT_COUNT(A3 ^ B3);</code>
Fungsi ini mengira jarak Hamming dengan menjalankan operasi XOR bitwise dan mengira bilangan 1 dalam keputusan. Pendekatan ini jauh lebih pantas daripada kaedah penguraian rentetan binari.
Selain itu, untuk kecekapan yang lebih baik, disyorkan untuk menggunakan lajur BIGINT dan bukannya lajur BINARI untuk menyimpan cincang. Kaedah alternatif menggunakan BIGINTs ini boleh menghasilkan pelaksanaan lebih 100 kali lebih pantas.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengira Jarak Hamming dengan Cekap untuk Hash SHA256 dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!