2010-09-21 2 views
1

Это то, что я собираюсь сделать, и я оценил бы ничей вход:ASP.NET стратегия поиска индексирование здание

Я построил форум в ASP.Net MVC и теперь хочу добавить Lucene.Net для поиска. Мой план - запустить поток построителя индекса каждые 5-10 минут, чтобы обновить индекс поиска с изменениями, внесенными в каждое обсуждение.

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

Как хорошо? Может ли кто-нибудь предложить лучший способ постепенного индексации изменений в приложении для форума?

ответ

1

Вам необходимо будет поддерживать таймер ... и если операция индексирования не прекратится через 5 минут, другой начнет индексировать те же изменения, поэтому вам также нужно будет проверить это условие.

Немного лучший способ - просто использовать выделенный поток индексирования, который остается живым. Этот поток будет извлекать изменения из последнего запуска и обрабатывать их по мере их описания, но он не будет ждать. После того, как операция индекса закончится, он сразу же заново начнет свою работу, постоянно индексируя по мере того, как позиции находятся.

Если товаров для индекса больше нет, Thread затем будет спать в течение 5 минут (а затем повторно проверить снова меняется, когда он просыпается).

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

Вам нужно будет следить за здоровьем Нити.

+0

благодарит за ваш ответ. Я использую Quartz.net для задания shcedule для работы в фоновом режиме. Я думаю, что я могу уволить одну работу в Quartz.net, которая никогда не выйдет. Что ты об этом думаешь? – Roman

+0

@Am звучит хорошо:) ... Раньше не использовал кварц, но я предполагал, что он может контролировать работоспособность работы и перезапускать его, если он тоже сработает? ... Другое дело, что вы можете на всякий случай сохранить некоторые журналы исключений. – chakrit

+0

Я особенно выбрал quartz.net, потому что он позволяет прослушивать разные события (например, start, finish, exception и т. Д.), Которые я использовал для ведения журнала. Затем я могу просто проверить журналы и посмотреть, какой фоновый поток рушится. – Roman

Смежные вопросы