|
| Дата |
|
USD/RUB | 90.4082 | BTC/USD | 69697.1242 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
08.07.2012, 01:35
|
Start Post: Sphinx
|
главный злодей гофака
Регистрация: 18.06.2007
Сообщений: 5,760
Бабло: $953838
|
Кто-то настраивал поиск на Sphinx ? Особенно интересует примеры production системы. Накидайте мануалов толковых.
__________________
|
|
|
21.07.2012, 01:22
|
#12
|
главный злодей гофака
Регистрация: 18.06.2007
Сообщений: 5,760
Бабло: $953838
ТС -->
|
ТС
Цитата:
Сообщение от chesser
ps хотя наверно сфинкс настраивается легче, чем организовывать свой индекс
|
именно поэтому, плюс по скорости сфинкс рвёт всё
__________________
|
|
|
21.07.2012, 02:50
|
#13
|
автоматизирую интернеты
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
|
Цитата:
Сообщение от sspy
плюс по скорости сфинкс рвёт всё
|
ну спорно же
http://en.wikipedia.org/wiki/Sphinx_%28search_engine%29 - вот тут пишут:
Цитата:
Searching speed of over 500 queries/sec against 1,000,000-document
|
тут измеряется скорость не понятно чего и наверняка с использованием дополнительного функционала аля морфологии и релевантности... Но при построении простейших индексов на основе mysql-memory можно добиться скоростей больших на несколько порядков. К примеру, даже без использования mysql_handlersocket выборка одного слова из индекса у меня работала со скоростью около 100000 операций/секунду. С использованием mysql_handlersocket будет быстрее раз в 5. По сути все упирается в скорость чипов памяти.
Сфинкс будет иметь преимущество на сложных задачах, решая которые придется изобретать свой сфинкс - а это уже и правда нерационально.
Поэтому я и спросил про задачу
|
|
|
21.07.2012, 03:14
|
#14
|
главный злодей гофака
Регистрация: 18.06.2007
Сообщений: 5,760
Бабло: $953838
ТС -->
|
ТС
Цитата:
Сообщение от chesser
тут измеряется скорость не понятно чего и наверняка с использованием дополнительного функционала аля морфологии и релевантности... Но при построении простейших индексов на основе mysql-memory можно добиться скоростей больших на несколько порядков. К примеру, даже без использования mysql_handlersocket выборка одного слова из индекса у меня работала со скоростью около 100000 операций/секунду. С использованием mysql_handlersocket будет быстрее раз в 5. По сути все упирается в скорость чипов памяти.
Сфинкс будет иметь преимущество на сложных задачах, решая которые придется изобретать свой сфинкс - а это уже и правда нерационально.
Поэтому я и спросил про задачу
|
у меня одна таблица в несколько десятков лямов с 5 полями varchar для поиска и несколькими enum по которым делается сортировка. управление релевантностью играет не последнюю роль, а в этом сфинкс очень даже преуспевает.
Почитал я про mysql_handlersocket и memory таблицы, в принципе толково, но готового мануала нет, а разбираться с нуля лень.
mysql-memory индексы сколько памяти кушают ? у сфинкса с этим всё четко
__________________
|
|
|
21.07.2012, 03:34
|
#15
|
автоматизирую интернеты
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
|
Цитата:
Сообщение от sspy
mysql-memory индексы сколько памяти кушают ? у сфинкса с этим всё четко
|
там тоже все четко
сколько памяти надо, столько и скушают. Индексы разные, хеш-индексы больше места займут, b-tree меньше. Но хеш индексы быстрее, хотя и не умеют сортировать и применять другие операции, работающие с положением строк относительно друг друга.
если в varchar хранится логическая единица поиска (наверно "терм"), то я бы сделал справочник(таблицу) всех термов вида: (hash, term) и после этого твою искомую таблицу надо перекроить в (hash1, hash2, hash3, hash4, hash5, enum1, enum2....). В зависимости от чувствительности к коллизиям можно подобрать нужную хеширующую функцию. Мне обычно хватает crc32. Таким образом у тебя получается таблица из 5-ти crc32 и enum полей. 5*crc32 = 20 байт + енумы.
Пусть даже одна строка займет 50 байт, при выделении mysql-memory памяти 2 гига в такую таблицу влезет 2Г/50 = 40 миллионов строк. Надо больше - докинуть памяти. А дальше скорость выборок зависит от скорости памяти. Ну еще этот индекс нужно поддерживать в актуальном состоянии - тоже временные издержки.
В случае использования mysql_handlersocket мы убираем SQL прослойку и работаем с памятью через API, т.е. почти напрямую. А там скорости высокие...ну примерно скорость выборки по id 300-1000тыщ операций в секунду в зависимости от памяти.
UPD: поисковые процессы можно запускать в несколько процессов, обычно 1 ядро проца = 1 процесс. Я для себя делал map-reduce, т.е. распаралеливал свои задачи на несколько процессов и потом результат объединял - так скорость вырастает еще в несколько раз.
|
|
|
21.07.2012, 20:56
|
#16
|
Member
Регистрация: 16.01.2008
Сообщений: 86
Бабло: $11570
|
Только, все равно не понятно, зачем изобретать свой велосипед. Хотя, конечно, если цель - изобрести велосипед - то да, можно заморачиваться. А иначе - зачем?
Скорость поиска с учетом морфологии и без - практически не меняется, у сфинкса. Меняется только скорость полной индексации, которую можно делать хоть раз в месяц, и обходиться дельта индексами и обьединением индексов.
Про процессы.. У сфинкса - необходимое условие - разные индексы. Т.е. имея 2 индекса (основной и дельта) - можно делать паралельный поиск, используя два ядра. И т.д. Настраивается - парой строк в конфиге..
Вобщем, для каждых задач - свои решения. С учетом скорости разработки, и простотой реализации.
PS. А вообще, можно на чистом асме написать свой веб сервер, простейший, который будет в 100 раз быстрее того же nginx, и в разы меньше жрать памяти. Но есть ли в этом смысл?
|
|
|
21.07.2012, 21:13
|
#17
|
Member
Регистрация: 16.01.2008
Сообщений: 86
Бабло: $11570
|
А вообще, судя по всему, связка sphinx + handlersocket должна дать очень очень хорошие результаты.
|
|
|
22.07.2012, 08:06
|
#18
|
автоматизирую интернеты
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
|
Цитата:
Сообщение от Gyrus
Только, все равно не понятно, зачем изобретать свой велосипед. Хотя, конечно, если цель - изобрести велосипед - то да, можно заморачиваться. А иначе - зачем?
|
я учил ИНС и в этом процессе был подпроцесс четкого поиска без морфологии.
До изобретения велосипеда скорость обучения была от месяца, после велосипеда - несколько часов. Плюс такие скорости позволили быстрее отлаживать алгоритм обучения и выявлять баги в бизнес логике софта. Ну и сам объем обрабатываемых данных увеличился.
Был вариант работать непосредственно с памятью, без mysql, например на c/c++, но разница в скоростях была бы меньше одного порядка..скорее всего 2-3 раза за минусом всех фич и удобств mysql. В общем, считаю mysql-memory довольно быстрым и удобным компонентом для обработки данных. А использование mysql-handlersocket - ну это как бы не принципиально, я бы сначала без него все сделал, а потом на него перешел.
Выбирая поисковую систему сегодня, я бы выбрал продукты Apache Foundation - наверно Lucene
|
|
|
29.10.2012, 19:00
|
#19
|
главный злодей гофака
Регистрация: 18.06.2007
Сообщений: 5,760
Бабло: $953838
ТС -->
|
ТС
у кого-то есть готовый конгфиг по main + delta с обновлением по времени изменения, а не id ?
__________________
|
|
|
|