2012-06-22 1 views
1

Работа с инкрементными импортными данными Solr из существующей нормализованной базы данных mssql. Я не могу принять решение о стратегии, которую мне нужно реализовать, или не знаю, существуют ли существующие инструменты для этого, поэтому мне не нужно изобретать колесо.Импорт инкрементных данных в Solr из нормализованной таблицы MSSQL со сложными объединениями

Мне нужно импортировать документ в Solr 3.6 для создания данных Solr, которые сохраняются в MSSQL в нормальном режиме. Чтобы получить данные для одного документа, требуется много соединений, которые убивают производительность. У меня appx. 1 млн. Таких документов в дБ. Так что полный импорт в Solr для меня не вариант.

Решая подход У меня есть два вопроса для рассмотрения:

  • инкрементный импорт данных, так что SQL-сервер не имеет большую нагрузку при извлечении данных из БД.
  • Обновление данные, которые были изменены в SQL Server в данную Solr один раз в день

Ищут после того, как помощь в определении стратегии и инструмента для дополнительного импорта данных в Solr. Я думаю, у меня есть следующие варианты:

  1. Пользовательское приложение для создания данных из MSSQL и передачи его в Solr. Мне нужно отслеживать данные как то, что все записи вставляются в Solr и что ожидает. Опять-таки, 2% -ные записи данных в MSSQL постоянно обновляются, поэтому необходимо отслеживать, какие данные изменились с тех пор, а затем обновить их в какой-то момент в Solr.

  2. Используйте любой существующий инструмент или утилиту в Solr, чтобы сделать то же самое, как DIH. Я не уверен, как это будет касаться как проблемы инкрементного поиска данных, так и того, как она будет отслеживать изменения данных на SQL-сервере? Опять же, не уверен, как DIH будет обрабатывать сложные соединения, требуется получить данные из db.

  3. Или используйте что-то вроде Lusql с DIH, все еще не уверен в том, как он будет решать обе проблемы. Хотя Lusql даст возможность делать сложные объединения в db, поэтому я надеюсь, что это может соответствовать моей цели.

Я в пользу использования LuSQL с DIH в Solr, если он может соответствовать цели, но до сих пор не знаю, как это отслеживать, какие данные меняются? Или для этой части мне нужно управлять вручную, поддерживая идентификатор документа, где выполняется изменение, а затем передавая его в LuSQL для извлечения данных из SQL и импорта в Solr.

Я также жду ваших предложений, помимо этого, для решения таких ситуаций.

ответ

2

Я поделюсь с вами так, как я это сделаю.

В основном у меня есть те же требования, и до этой недели я использовал solr dataimport с дельта-импортом. У меня есть программа, которая регулярно обновляет статус для новых элементов от 0 до 1, а затем вызывает импорт данных solr для получения всех документов со статусом 1. Solrdataimport использует хранимую процедуру для соединения и получения документов со статусом 1 из db. Если импорт завершен успешно, я обновляю статус до 2, и я знаю, что эти документы находятся в solr. Если документы меняются, я просто перехожу из состояния 2 в состояние 0, а затем процесс импорта обновляет документ в solr.

Все работает отлично для меня, используя этот процесс. Я всегда получаю новые документы в solr без необходимости извлекать все данные из базы данных.

Теперь мои требования изменились, потому что мы решили сохранить дату, заархивированную в базе данных, поскольку нам это нужно только в solr. Поэтому мне нужно иметь программу, которая десериализует данные, а затем отправляет их в solr.

Теперь мой подход заключается в том, чтобы добавить все новые/обновленные документы с помощью обработчика обновлений и после того, как я добавил все документы для их фиксации, и если фиксация прошла успешно, я обновляю статус в базе данных. При таком подходе у меня пока нет опыта, поэтому я не знаю, будет ли это работать или нет, но я просто попытаюсь посмотреть, что произойдет.

Я исследовал в прошлом лучший способ сделать это, но я ничего не мог найти, поэтому, если вы найдете лучшее решение, поделитесь им со мной.

Удачи :)

+0

Просто интересно, как вы использовали хранимую процедуру с DIH? Можете ли вы поделиться примером/ссылкой? –

+1

посмотрите на это http://stackoverflow.com/questions/8824072/calling-stored-procedure-from-solr –

+0

спасибо Дорин за ваши объяснения. Теперь, если DIH поддерживает хранимую процедуру, тогда ее можно использовать для запуска сложных запросов с объединениями. И для отслеживания изменений продуктов мне нужно отслеживать их в соответствии с вашими предложениями в фактическом db. Но не понял, как это работает для инкрементного импорта данных с использованием DIH и как Solr отслеживает записи записей, какие данные импортировали с использованием импорта дельта, а что нет? Это очень мало документов. Pls советует мне, как мне следует продолжить? – Krunal

1

Мы должны были проиндексировать с сильно нормированной схемы с 25+ таблиц, половина из них содержат более 5 млн записей каждый. Самый большой ~ 20M.

Мы используем informatica для загрузки этих записей из oracle в solr. Инструменты ETL, такие как informatica, предоставляют способы соединения таблиц/результатов запроса за пределами реляционной базы данных. Он имеет сортировщик для сортировки боковой базы данных. Совокупное преобразование в группу по записям вне db. Существует также трансформация поиска.

По существу, наши данные де-нормируются поэтапно, и процесс загрузки/индексирования распределяется.

Есть инструменты с открытым исходным кодом ETL, конечно. Существует инструмент Microsoft ETL.

Индексирование на solr происходит с помощью обработчика обновлений. Индексация Delta очень похожа на полную индексацию с дополнительной логикой для сбора данных изменений. Планируется деятельность ETL.