У нас проблемы с индексацией записей из нашей базы данных в Lucene Index.Это наша текущая ситуация.
Нам нужно проиндексировать данные из нескольких таблиц из базы данных.Все они связаны с внешними ключами, от 1 до n отношений.Полная запись, которую мы хотели бы проиндексировать, представляет собой комбинацию данных из этой таблицы.Проблема в том, что у нас есть десятки миллионов записей в базе данных.Наши подходы:
- Выбор всех записей с помощью запроса LEFT JOIN, затем мы используем метод
IndexWriter.AddDocument(IEnumerable<IIndexableField> doc)
, чтобы добавить эти записи в пакете в наш индекс.Это работает нормально только с одной таблицей - когда мы объединяем несколько таблиц, мы получаем тайм-ауты при подключении к базе данных, и наши администраторы говорят нам, что мы убиваем сервер своими запросами.Во всех наших объединениях указаны ключи, и мы ничего не можем сделать, чтобы улучшить их - слишком много данных для загрузки в одном запросе.
Выберите данные по одной таблице за раз.Это тоже хорошо, но мы либо заканчиваем с несколькими индексами - каждый из которых содержит только часть данных, которые мы хотим - или один индекс с несколькими «неполными» записями.Если вместо вставки нескольких неполных записей мы попытаемся обновить существующие:
IndexWriter.UpdateDocument(Term term, IEnumerable<IIndexableField> doc)
, это займет слишком много времени.Обновление в этом случае происходит очень медленно.
Итак, вопрос в том, , что будет лучшим подходом при индексации данных из нескольких таблиц, содержащих миллионы записей ?