Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Реализация поиска
 
 автор: Filsh   (01.08.2012 в 23:57)   письмо автору
 
 

Интересует вопрос как реализовать поиск в высоконагруженом проекте.
Поиск должен быть для пользователя по множеству критериев, начиная от возраста, роста,..... и заканчивая цветом глаз.
Пока что кроме битовой маски в mysql мемори таблице ничего на ум не приходит.
Может кто то уже такое реализовывал, может какие то другие, новые технологии....?

  Ответить  
 
 автор: cheops   (02.08.2012 в 07:42)   письмо автору
 
   для: Filsh   (01.08.2012 в 23:57)
 

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

  Ответить  
 
 автор: Filsh   (02.08.2012 в 09:00)   письмо автору
 
   для: cheops   (02.08.2012 в 07:42)
 

Да, в том и дело что абстрактно, мне не нужно реализации, это я все сам могу сделать.
Просто у нас в текущем проекте поиск сделан по битовой маске и таблица лежит в оперативной памяти, ну и там куча серверов, репликация,.... Эта таблица у нас получается громадная и много критериев для поиска, из-за этого происходят тяжелые математические операции(просчет битов, сдвиги) и не смотря на то что все кешируется оно все равно медленно работает, хотя и выдержывает приличную нагрузку. Сейчас у меня задача сделать подобный поиск для своего проекта и меня интересуют альтернативы, может Sphinx, или еще что то?

  Ответить  
 
 автор: cheops   (02.08.2012 в 09:31)   письмо автору
 
   для: Filsh   (02.08.2012 в 09:00)
 

Нет возможности разбить громадную таблицу на несколько меньшего размера?

  Ответить  
 
 автор: Filsh   (02.08.2012 в 19:31)   письмо автору
 
   для: cheops   (02.08.2012 в 09:31)
 

Ну в принципе можно.

  Ответить  
 
 автор: cheops   (02.08.2012 в 21:30)   письмо автору
 
   для: Filsh   (02.08.2012 в 19:31)
 

Чем меньше объем таблицы, тем быстрее она обрабатывается.

  Ответить  
 
 автор: Filsh   (15.08.2012 в 22:19)   письмо автору
 
   для: cheops   (02.08.2012 в 21:30)
 

Если Вам еще интересно, то выбрал я Neo4j.
http://neo4j.org/
Провел на нем маленькое тестирование по скорости, а вместе с тем еще и разобрался с ним немного и хочу поделится
Это графовая база, вначале я запихнул туда около миллиона узлов и соединил их по связям пол, возраст, город и т.д.
потом я понял что это все бред, потому как возраст меняется, город тоже и перестраивать граф очень накладно и чем дальше в лес тем чаше это нужно делать. Потом я сделал типа такой структуру

                                              Украина
                                                     |
                          Киев                                             Харьков
                           |                                                        |
             мужчина               женщина              мужчина                женщина
              |                            |                         |                            |
user1          user2          user3          user4          user5          user6          user7          user8

И у каждого юзера свойства типа возраст, цвет глаз и т.д. Засунул я туда по 50 000 пользователей на каждый пол, то есть на один город получилось 100 000
Тестировал на
i7(4 виртуальных ядра)
8 Гб оперативы

в итоге получил время выполнения поиска с критериями ~ 0.05с - 0.06с
это если в графе я конкретно указываю на каком узле искать, если говорить ему найди мне во всем городе, то это больше примерно в два раза, если в Украине - то это уже секунды. Вообщем нужно задавать поиск максимально близкий к нужной вершине.
Тест проводился без индексов и кеширования. Для моего проекта 100 000 пользователей на один город очень приличный результат и если я его смогу добиться, то там уже будут более глобальные проблемы чем производительность поиска))
По оптимизации - добавить индекс + кеширование.

Может кто то уже пробовал с Neo4j работать, буду очень рад если поделитесь опытом.

P.S. Не получается сделать красиво иллюстрацию графа, извиняйте)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования