Postgres полнотекстовый поиск - PullRequest
1 голос
/ 19 июля 2009

Я занимаюсь веб-проектом на основе фреймворка asp.net mvc. В качестве базы данных я использую Postgre SQL. Вопрос в том, как организовать поиск в моем приложении. Одним из вариантов будет использование библиотек .net, таких как lucene.net. Другим вариантом является использование полнотекстового поиска Postgre. Так какой же самый лучший вариант?

1 Ответ

3 голосов
/ 21 июля 2009

Я не запускал postgres на производстве, но я играл с ним на тестовой БД с довольно значительным (я думаю) объемом данных. Индексирование около 600 000 строк текстовых строк, в среднем 3 слова, создает полнотекстовый индекс размером 120 МБ. Запросы очень быстры к этому индексу после первого для каждого поискового запроса. Похоже, что индекс для каждого термина должен быть извлечен с диска в память. Я еще не нашел способ вытянуть весь индекс в память при запуске. Отчасти начальная медлительность может быть связана с дисковым вводом-выводом, поскольку я работаю на одном ноутбуке HD. Я также не уверен, что для индекса 120 МБ потребуется 120 МБ памяти БД или более.

Для производственного приложения мы используем Lucene для Java, и оно работает очень хорошо - ответы в секунду, с несколькими ГБ индексных данных. Преимущество Lucene, которое я вижу, состоит в том, что 1) он независим от БД и 2) распространяется. Для # 1 это может не быть проблемой, но это означает, что вы можете использовать один и тот же код индексации независимо от того, какая у вас базовая БД. Для # 2 это зависит от того, насколько большим будет приложение. Lucene (и особенно Hadoop) разработаны для многопоточности, поэтому вы можете хранить индекс на общем диске и одновременно выполнять поиск на нескольких машинах (обратите внимание, что индексирование все еще однопоточное). Хотите вы этого или нет, зависит от вашей архитектуры. Вы бы предпочли иметь 1 большую БД или 1 маленькую / среднюю БД плюс несколько небольших серверов индексирования, поддерживающих ее?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...