Могу ли я предсказать, насколько большим будет мой индекс Zend Framework? (и некоторые быстрые вопросы:) - PullRequest
3 голосов
/ 22 декабря 2009

У меня есть около 100thousand строк в таблице MySQL, где each row has about 8 fields.

Наконец-то я понял, как использовать Zend Lucene для индексации и поиска данных из таблицы mysql.

Прежде чем я полностью реализую эту функциональность на своем сайте, у меня есть несколько вопросов:

1- Можно ли заранее определить размер индекса? Это потому, что в руководстве Zend сказано, что максимальный размер индекса составляет 2 ГБ. Я сразу же думаю, что этого недостаточно для моего стола!

2- Я читал посты, в которых говорится, что Zend Lucene очень медленно выполняет поиск по большим индексам, вплоть до минут! Быстрее ли использовать команды mysql напрямую (SELECT, LIKE и т. Д.) Вместо zend?

3- Существуют ли другие решения моей проблемы, заключающиеся в создании поисковой системы для объявлений, которая имеет по крайней мере эти функции и не требует полнотекстовых индексов (полей) mysql.

Спасибо

1 Ответ

11 голосов
/ 22 декабря 2009

SOLR - это в основном контейнер Apache Tomcat, который реализует интерфейс REST для запроса индекса Apache Lucene. Да, вы должны иметь возможность запускать приложение Java на вашем веб-сервере. Это проблема для вас, чтобы работать с вашим хостинг-провайдером.

Клиенты, использующие ваше веб-приложение, не должны запускать Java. Ваше приложение PHP может сделать запрос REST к сервису SOLR и отформатировать результаты в HTML. Клиент видит только вывод HTML; ему никогда не нужно знать, что данные получены из службы, реализованной на Java.

Zend_Search_Lucene - это реализация на чистом PHP, которая должна работать идентично Apache Lucene. Решение Zend даже использует идентичный формат файла индекса. Таким образом, для хранения они должны быть равны.

Я использовал Java Lucene для индексации дампа данных StackOverflow (октябрь 2009 г.). Я проиндексировал 1,5 миллиона строк, в том числе около 1 гига текстовых данных. Индекс Lucene составлял 1323 МБ, тогда как индекс MySQL FULLTEXT для тех же данных составлял только 466 МБ.

Использование SQL LIKE Предикаты вместо любого решения по полнотекстовой индексации, разумеется, не требуют места, поскольку в любом случае не могут использовать обычный индекс. Но в моих тестах использование LIKE было примерно в 200 раз медленнее, чем Java Lucene, который в свою очередь был примерно на 40% медленнее, чем индекс MySQL FULLTEXT для тех же данных.

Смотрите мою недавнюю презентацию о решениях полнотекстовой индексации с MySQL:

http://www.slideshare.net/billkarwin/practical-full-text-search-with-my-sql

Не удивительно, что он не может сравниться с производительностью и масштабируемостью технологии Java Lucene. Преимущество PHP как языка в повышении эффективности разработки, а не эффективности времени выполнения.


обновление: Я только что попытался создать индекс, используя Zend_Search_Lucene. Создание индекса намного медленнее с PHP, чем с технологией Java Lucene, поэтому я проиндексировал только 10 000 документов. Это заняло почти 15 минут, что заняло бы около 36 часов, чтобы проиндексировать всю коллекцию. Сравните это с Java Lucene, который в моем тесте проиндексировал полную коллекцию из 1,5 миллионов документов менее чем за 7 минут.

Размер индекса, созданного с помощью Zend_Search_Lucene, составляет 8,75 МБ. Экстраполируя это 150x, я оцениваю полный индекс в 1312,5 МБ. Итак, я заключаю, что Zend_Search_Lucene создает индекс примерно того же размера, что и индекс, созданный Java Lucene. Это как и ожидалось.

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