У мене є така проблема: у мене є база даних, що містить понад 2 мільйони записів. У кожному записі є рядкове поле X, і я хочу відобразити список записів, для якого поле X містить певний рядок. Кожен запис має розмір близько 500 байт.
Щоб зробити це більш конкретним: у графічному інтерфейсі моєї програми у мене є текстове поле, куди я можу ввести рядок. Над текстовим полем я маю таблицю із відображенням (перший N, наприклад 100) записів, які відповідають рядку в текстовому полі. Коли я набираю або видаляю один символ у текстовому полі, вміст таблиці повинен бути оновлений на льоту.
Цікаво, чи існує ефективний спосіб зробити це за допомогою відповідних індексних структур та / або кешування. Як було пояснено вище, я хочу лише показати перші N елементів, які відповідають запиту. Тому для N досить малих, це не повинно бути великим питанням завантаження відповідних елементів із бази даних. Крім того, кешування елементів в основній пам'яті може зробити пошук швидшим.
Я думаю, що головна проблема полягає в тому, як швидко знайти відповідні елементи, враховуючи рядок шаблону. Чи можу я покластися на деякі засоби СУБД, чи потрібно самостійно будувати індекс пам'яті? Будь-які ідеї?
EDIT
Я провів перший експеримент. Я розділив записи на різні текстові файли (максимум 200 записів на файл) і розмістив файли в різних каталогах (я використовував вміст одного поля даних для визначення дерева каталогу). У кінцевому підсумку я маю близько 50000 файлів у приблизно 40000 каталогах. Потім я запустив Lucene, щоб індексувати файли. Пошук рядка за допомогою демо-програми Lucene досить швидкий. Розщеплення та індексація зайняли кілька хвилин: це для мене цілком прийнятно, оскільки це статичний набір даних, який я хочу запитувати.
Наступним кроком є інтеграція Lucene в основну програму та використання звернень, повернутих Lucene, для завантаження відповідних записів у основну пам'ять.