Pull to refresh

Comments 28

Интересно, но хотелось бы подробностей о тестовом наборе данных (хотя бы какие тексты содержались, для оценки размера индексов и какой-никакой эффективности их использования).

Почему 'таблица', а не коллекция?
1000 наборов из 2х слов.
Таблицы — чтоб sqlщики поняли.
сразу вспоминается шутка про то как 3 DBA зайдя в NoSQL бар ушли оттуда так и не найдя table
Сравнивать полнотекст Sphinx'а с текстовым поиском MongoDB — очень странно. У монги очень примитивный поиск и вряд ли они особо сильно будут его развивать.
Интересно. Но в моей ситуации сравнение немного некорректное. Я сейчас пишу пост про прикручивание сфинкса к монге, у меня набор в 20 гб плайнтекста, 327 млн документов. Так вот, сам сфинкс работает да, очень быстро. Выплевывает результат мгновенно. Но получить записи, найденные сфинксом, по id'шникам из MongoDB занимает значительное время. Мне требуются ВСЕ совпадения, а их на один запрос может быть несколько сотен тысяч. Таким образом вам бы стоило сравнить время выборки данных в случае сфинкс+ монго и просто монго.
Хм. А можно узнать, что за кейс такой, когда нужны все совпадения? Обычно-то постраничка или ее аналог есть. Какое-то API?
Мы работаем над этим проектом: keydb.ru/ На сайте будет разработан веб-интерфейс для поиска по базе данных. На данный момент никакого интерфейса нет, и клиентам базы данных предлагается скачать 19ГБ текстовый файл и далее иметь с ним делом сами.
а там случаем не несколько сотен тысяч запросов с отдельными выборками тормозят?

типично запрос select * from data where id in (1,2,3,...,100000) это куда быстрее, чем 100000 запросов select *… where id=$id; в случае монги синтаксис, понятно, другой, но беда-то та же самая
Я в монге документы получаю одним запросом по списку идентификаторов из сфинкса, запрос наподобие { _id:{ $in:[a,b,c] } }
Нет, использую $in оператор mongodb
Есть еще проблема выбрать из монги документы в том порядке, в котором они пришли из сфинкса, соблюдая релевантность выдачи, потому что монга не умеет выбирать данные в требуемом порядке. Как вы с этим справлялись?
Отправляю результат sphinx и полученные документы из mongoDB клиенту, там происходит сортировка и вывод данных. (это для ajax приложения), а на сервере я сортирую вручную, либо получаю из mongoDB по сортированному индексу если указана сортировка.
Простите, что не про mongo, но:
Сфинкс, который не блещет документацией...
Отличная документация. Чего именно в ней не хватило?
… и клиентами
Со сфинксом уже давно можно работать любым mysql-клиентом (и это рекомендуемый способ).
postgres тоже уже давно есть.
впрочем через xml неменее удобно в индексы кидать.
Лично мне не хватило описания клиентов, его нет. А в целом документация хорошая.
Так во всех API совершенно одинаковые методы, специально так. Документация на них есть по второй ссылке выше (API reference).

Плюс конкретно для Питоновского есть пара тестовых программок, которые показывают ключевое: как поискать, как построить сниппет. Ну и, конечно, MySQLdb + SphinxQL тоже никто не отменял.

В общем, довольно удивительно читать про «нету описания клиентов», да.

Offtopic: примерно настолько, как удивительно читать (был недавно тред на форуме) «ничего не работает, мы потратили кучу сил, надоело и плюнули» — при этом, разумеется, полчаса времени на то, чтобы отправить нам внятный багрепорт с конкретным описанием, а что же именно и при каких конкретно условиях не работает, не нашлось ни до, ни после треда. ;) Чо, бывает…
Да, проблема сформулировона не правильно. После использования АПИ для баз даннах я думал, что под каждый язык пишется свой клиент и документация для его использования. Статью подправлю.
Ммм. (а теперь про Монго, да!). Я правильно понимаю, что если я обновлю текстовое поле в MongoDB, это изменение сразу же отразится в полтотекстовом индексе, без дополнительного вызова процедуры индексации? Если так, то сравнивать-то надо, по справедливости, с RT-индексами Sphinx-а.
> сравнивать-то надо, по справедливости, с RT-индексами Sphinx-а.

там в итоге после OPTIMIZE совершенно (!) такой же дисковый получается :)

только вставки чуть побыстрее!!!
Намек понял, теперь догадался, как RT работают. :)

Я думал, там все сложнее ;)
Что там догадываться, в документации все английским по-белому написано. Произвольный объем данных в фиксированную RAM не засунешь, поэтому все основывается на дисковых индексах все равно, конечно. Как иначе.
спасибо за сравнение!

Нам уже давно самим любопытно, но руки не доходили категорически, а тут такой подарок :)
1) не поверю, что fulltext монго быстрее сфинкса, по этому обязательно проверю…
2) по какому критерию/алгоритму формируется значение параметра «score»
1) я тожу не поверю
2) в доках не говорится об этом
Вы своим поиском портите кеш Монго, который бы использовался для оптимизации обычных запросов.
на мой взгляд, странно сравнивать функцию базы данных с узкоспециализированным инструментом. В таких случаях инструменты выигрывают почти всегда. Другой вопрос, зачем используется текстовый поиск? Для создания простых фильтров? Подойдет текстовый поиск монго. Полнофункциональный поиск по сайту? Специализированный инструмент будет лучше. Каждый инструмент решает свою задачу. Сомневаюсь, что текстовый поиск в монго создавался для организации полнофункционального поиска по сайту. Ну и опять же, функция в стадии бэты, кто знает, что будет дальше…
Sign up to leave a comment.

Articles