Saya memiliki masalah berikut: Saya memiliki database yang berisi lebih dari 2 juta catatan. Setiap catatan memiliki bidang string X dan saya ingin menampilkan daftar catatan yang bidang X berisi string tertentu. Setiap record berukuran sekitar 500 byte.
Untuk membuatnya lebih konkret: di GUI aplikasi saya, saya memiliki bidang teks tempat saya dapat memasukkan string. Di atas bidang teks saya memiliki tabel yang menampilkan catatan (pertama N, misalnya 100) yang cocok dengan string di bidang teks. Ketika saya mengetik atau menghapus satu karakter di bidang teks, konten tabel harus diperbarui dengan cepat.
Saya bertanya-tanya apakah ada cara yang efisien untuk melakukan ini menggunakan struktur indeks yang sesuai dan / atau caching. Seperti dijelaskan di atas, saya hanya ingin menampilkan item N pertama yang cocok dengan kueri. Oleh karena itu, untuk N yang cukup kecil, seharusnya tidak menjadi masalah besar memuat item yang cocok dari database. Selain itu, caching item dalam memori utama dapat membuat pengambilan lebih cepat.
Saya pikir masalah utamanya adalah bagaimana menemukan item yang cocok dengan cepat, mengingat pola string. Dapatkah saya mengandalkan beberapa fasilitas DBMS, atau apakah saya harus membuat sendiri indeks dalam memori? Ada ide?
EDIT
Saya telah menjalankan percobaan pertama. Saya telah membagi catatan menjadi file teks yang berbeda (paling banyak 200 catatan per file) dan meletakkan file dalam direktori yang berbeda (saya menggunakan konten dari satu bidang data untuk menentukan pohon direktori). Saya berakhir dengan sekitar 50.000 file di sekitar 40000 direktori. Saya kemudian menjalankan Lucene untuk mengindeks file. Mencari string dengan program demo Lucene cukup cepat. Pemisahan dan pengindeksan memakan waktu beberapa menit: ini benar-benar dapat diterima bagi saya karena ini adalah kumpulan data statis yang ingin saya tanyakan.
Langkah selanjutnya adalah mengintegrasikan Lucene dalam program utama dan menggunakan hit yang dikembalikan oleh Lucene untuk memuat catatan yang relevan ke dalam memori utama.