Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah Saya Boleh Mengira Jarak Hamming dengan Cekap untuk Hash SHA256 dalam SQL?

Bagaimanakah Saya Boleh Mengira Jarak Hamming dengan Cekap untuk Hash SHA256 dalam SQL?

Susan Sarandon
Susan Sarandonasal
2024-10-25 08:53:44142semak imbas

How Can I Efficiently Calculate Hamming Distance for SHA256 Hashes in SQL?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn