Ben algısal görüntü karma içeren büyük bir veritabanı (16M satır) var.
Makul bir zaman aralığında mesafeyi sıkıştırarak satırları arayabilmek istiyorum .
Şu anda, sorunu doğru bir şekilde anladığım kadarıyla, buradaki en iyi seçeneğin bir BK Ağacı uygulayan özel bir SP-GiST uygulaması olacağını düşünüyorum , ancak bu çok fazla iş gibi görünüyor ve hala pratikte bulanıkım özel bir dizinin düzgün bir şekilde uygulanmasının ayrıntıları. Hamming mesafe hesaplama uysal yeter, ben yapmak olsa da, C biliyoruz.
Temel olarak, burada uygun yaklaşım nedir? Bir karma belirli bir düzenleme mesafesi içinde eşleşmeleri sorgulamak gerekir. Anladığım kadarıyla, eşit uzunlukta dizeleriyle Levenshtein mesafe işlevsel mesafe hamming, bu yüzden en azından orada bazı ne istiyorum için mevcut destek o (hatırlamak gelen net bir yolu, ben sorgulama ediyorum değer bir dizin oluşturmak için de, Sabit bir değerden olan mesafeyi önceden hesaplayamıyorum, çünkü bu sadece bir değer için yararlı olacaktır).
Karmalar şu anda karma ikili ASCII kodlamasını içeren 64 karakterlik bir dize olarak saklanır (örneğin "10010101 ..."), ancak bunları kolayca int64'e dönüştürebilirim. Asıl mesele, nispeten hızlı sorgulama yapabilmem gerekiyor.
Görünüşe göre pg_trgm
, istediğim şeyin çizgileri boyunca bir şey elde etmek mümkün olabilir , ancak mechamizle eşleşen trigramın nasıl çalıştığından biraz emin değilim (özellikle, döndürdüğü benzerlik metriği gerçekten neyi temsil ediyor? düzenleme mesafesi gibi).
Ekleme performansı kritik değildir (her satır için karmaları hesaplamak çok hesaplı olarak pahalıdır), bu yüzden öncelikle aramayı önemsiyorum.