Saya memiliki basis data besar (16M baris) yang berisi hash perceptual gambar.
Saya ingin dapat mencari baris dengan jarak tempuh dalam jangka waktu yang masuk akal.
Saat ini, sejauh yang saya mengerti benar masalah ini, saya pikir pilihan terbaik di sini adalah implementasi SP-GiST kustom yang mengimplementasikan BK-Tree , tapi itu sepertinya banyak pekerjaan, dan saya masih bingung pada praktis rincian penerapan indeks kustom dengan benar. Menghitung jarak Hamming cukup penurut, dan saya lakukan tahu C, meskipun.
Pada dasarnya, apa pendekatan yang tepat di sini? Saya harus dapat meminta kecocokan dalam jarak edit tertentu dari hash. Seperti yang saya pahami, jarak Levenshtein dengan string dengan panjang yang sama secara fungsional adalah jarak hamming, jadi setidaknya ada beberapa dukungan yang ada untuk apa yang saya inginkan, meskipun tidak ada cara yang jelas untuk membuat indeks dari itu (ingat, nilai yang saya minta untuk perubahan. Saya tidak dapat melakukan pra-hitung jarak dari nilai tetap, karena itu hanya akan berguna untuk nilai yang satu itu).
Hash saat ini disimpan sebagai string 64-char yang berisi pengkodean ASCII biner dari hash (misalnya "10010101 ..."), tetapi saya dapat mengonversinya menjadi int64 dengan cukup mudah. Masalah sebenarnya adalah saya harus bisa melakukan query relatif cepat.
Sepertinya itu mungkin untuk mencapai sesuatu di sepanjang garis yang saya inginkan dengan pg_trgm
, tapi saya agak tidak jelas tentang bagaimana mekanisme pencocokan trigram bekerja (khususnya, apa kesamaan metrik yang dikembalikan sebenarnya mewakili? Tampaknya jenis seperti edit-jarak).
Memasukkan kinerja tidak penting (sangat mahal secara komputasi untuk menghitung hash untuk setiap baris), jadi saya terutama peduli tentang pencarian.