Aşağıdaki sorunu yaşıyorum: 2 milyondan fazla kayıt içeren bir veritabanım var. Her kaydın bir X string alanı vardır ve X alanının belirli bir dize içerdiği kayıtların bir listesini görüntülemek istiyorum. Her kaydın boyutu yaklaşık 500 bayttır.
Daha somutlaştırmak için: başvurumun GUI'sinde bir dize girebileceğim bir metin alanına sahibim. Metin alanının üstünde, metin alanındaki dizeyle eşleşen (ilk N, örneğin 100) kayıtları gösteren bir tablom var. Metin alanına bir karakter yazdığımda veya sildiğimde, tablo içeriği anında güncellenmelidir.
Bunu uygun indeks yapıları ve / veya önbellek kullanarak yapmanın etkili bir yolu olup olmadığını merak ediyorum. Yukarıda açıklandığı gibi, yalnızca sorguyla eşleşen ilk N öğesini görüntülemek istiyorum. Bu nedenle, N küçük için, eşleşen öğeleri veritabanından yüklemek büyük bir sorun olmamalıdır. Ayrıca, ana bellekteki öğelerin önbelleğe alınması, erişimi daha hızlı hale getirebilir.
Bence asıl problem, kalıp dizgisine verilen eşleme maddelerinin hızlıca nasıl bulunacağı. Bazı DBMS özelliklerine güvenebilir miyim, yoksa bazı bellek içi endeksleri kendim mi oluşturmalıyım? Herhangi bir fikir?
DÜZENLE
İlk deneyi yaptım. Kayıtları farklı metin dosyalarına böldüm (dosya başına en fazla 200 kayıt) ve dosyaları farklı dizinlere koydum (dizin ağacını belirlemek için bir veri alanının içeriğini kullandım). 40000 dizinde yaklaşık 50000 dosya ile son bulurum. Dosyaları indekslemek için Lucene'yi çalıştırdım. Lucene demo programı ile bir dize aramak oldukça hızlı. Bölme ve dizin oluşturma birkaç dakika sürdü: bu benim için tamamen kabul edilebilir çünkü sorgulamak istediğim statik bir veri seti.
Bir sonraki adım, Lucene'yi ana programa entegre etmek ve ilgili kayıtları ana hafızaya yüklemek için Lucene'nin geri gönderdiği isabetleri kullanmaktır.