Внедрить Lucene в существующий стек .NET/SQL Server с несколькими веб-серверами - хранить индексы в базе данных?

Эта статья предложила мне огромное количество информации:
Внедрить Lucene в существующий стек .NET/SQL Server с несколькими веб-серверами

Я хотел бы остановиться на этом, задав вопрос о внедрении Lucene Directory, который будет сохранять индексы в базе данных (в моем случае SQL Server) - если у кого-то есть SWAG, то это будет полезно.

Я вижу, что в сфере Java это (например, Compass), и я действительно надеюсь, что люди Stackoverflow могли бы подумать об этом? Любая обратная связь будет оценена.

Мое новизное мышление заключается в том, что сохраняющиеся индексы к БД будут способом решения проблемы "распространения". Таким образом, вместо того, чтобы внедрять обмен сообщениями (это невозможно для моего программного обеспечения из-за ограничений развертывания) или планирования (было бы нормально - пользователи продуктов всегда становились неуклюжими в принятии решений о том, как индексированные данные должны быть), IndexReader повторно открывает ( ) будет эффективно обновлять снимок индекса на любом сервере node.

Это работает, если DB concurrency/load не является сердцем решаемой проблемы? - наше использование сосредоточено на облегчении анализа различных данных на полях, которые в свою очередь облегчают различные формы соответствия.

Наша архитектура/ограничения развертывания на самом деле не позволяют нам настаивать на выделенных серверах ala SOLR, поэтому это понятие распределения было уценено нами.

Ответы

Ответ 1

Сколько изменений индекса вы ожидаете? Когда вы хотите прочитать в индексе? (При запуске приложения?) Помещение индекса в базу данных и "загрузка" его при создании индекса может потреблять слишком много ресурсов.

Не уверены в ограничениях на развертывание, но у вас есть общее файловое пространство для ваших компьютеров (например, общий ресурс SMB/NFS или аналогичный или даже решение на основе SAN)?

Ответ 2

Я бы немного боялся проблем с производительностью с индексами в db. Посмотрите Elasticsearch. Это преемник компаса. Он требует Java, но имеет очень аккуратный интерфейс REST для вашего .NET-решения. Elasticsearch поддерживает распространение и репликацию между несколькими узлами. Вы можете запустить его на узлах веб-сервера.

Ответ 3

Это решение убьет производительность индекса, так как он должен получить его из БД. Я бы настоятельно рекомендовал перейти к более новой/лучшей альтернативе, то есть Solr (используя Solr.NET) или ElasticSearch (используя NEST)

Solr - это высокоуровневый интерфейс/менеджер для индексов Lucene с упрощенной конфигурацией, кластеризацией, репликацией и т.д., решенным для вас. Приятно, что если у вас есть некоторый exp. с Луценей, это не будет таким большим шагом.

ElasticSearch - это другой подход, но его трудно изучить.