Нажмите здесь для Найти девушку по параметрам Однако, надежда нажать на волшебную кнопочку и найти себе любовь не гаснет в сердцах многих. И мы должны эту... Как найти девушку за 250 микросекунд. В отличие от Европы и Америки в России к сайтам знакомств преобладает осторожное отношение. Однако, надежда нажать на волшебную кнопочку и найти себе любовь не гаснет в сердцах многих. И мы должны эту надежду оправдывать. Конечно, сразу найти идеально подходящую “половинку” мы не обещаем, но предложить десятки, сотни или в отдельных случаях тысячи вариантов, отвечающих именно вашим запросам, просто обязаны. Что и делаем, причем очень быстро. для каждой конкретной анкеты выдает ее место в поиске (каждый пользователь, заходя в свою анкету, видит сообщение «Вы находитесь на N месте в поиске») выдает конкретную анкету из списка по первичному ключу производит непосредственный поиск анкеты по заданным параметрам. Sphinx: source - mysql, индексировались только int поля через sql_attr_uint. Весь индекс в памяти. анкеты, расположенные в Москве и области, имеющие фотографии (это наиболее часто запрашиваемый тип анкет) индекс ВИП-пользователей (ВИП-пользователи имеют определенные преимущества, в том числе в поисковой выдаче, поэтому обрабатываются отдельно) полный индекс всех типов анкет по всем полям каждой анкеты анкеты разбиваются на блоки по 256 анкет в блоке каждый блок кладётся в индекс: вначале 1-ый бит первого поля каждой анкеты, потом 2-ой бит от каждой анкеты, и т. д. Таким образом, данные одного бита из поля всех анкет идут подряд. Допустим, у нас есть такие анкеты (показан 1 блок, поскольку минимально допустимый возраст 18, то 18 лет кодируется как 0000, 19 как 0010, 20 как 0100, и так далее) После обработки получается индекс следующего вида (жирным шрифтом выделен первый бит, до и после): Для каких-то полей значение хранится некомпактно. Например, настоящее поле «возраст» принимает 64 значения. Можно хранить по 1 биту на возможное значение, то есть поле займёт 64 бита, но поиск будет занимать всего 1 операцию, а поиск по диапазону — 2 операции. Более традиционный вариант — хранить его как число, тогда это займёт log2(64) = 6 бит, но поиск конкретного возраста будет занимать 6 операций, а поиск по диапазону более 12 (точное значение зависит от длины записанного в виде ДНФ условия сравнения). демон принимает и распарсивает запрос выделяется память под результаты (по биту на каждую анкету в индексе) выделяется сегмент памяти под скомпилированный запрос, ему ставится флаг выполнения в этот сегмент пишется: код инициализации, заголовок цикла для каждого поля, по которому нужно фильтровать результат, пишется код, который проверяет значение этого поля окончание цикла, проверка границ, подсчёт кол-ва найденного. Обработка запроса происходит так: После этого остается только пройти по битовому массиву с результатом и посмотреть, у каких анкет выставлены 1. В нашем примере результатом будет 00010, то есть запросу удовлетворяет только анкета номер 4. Демон поиска “Мамбы” вызывается со значительной части всех страниц сайта. Думаю, стоит отметить, что вместе с несколькими другими “основными” демонами он использует протокол JSON-RPC и в целом создает “единое демоническое пространство”. Реальная статистика поиска выглядит следующим образом: Рис. 1 Запросы на поиск по id анкеты (график с одного сервера) Рис. 2 Запросы на поиск по параметрам (график с одного сервера) Всего поиск работает на двух машинах, пиковая производительность одной — 20k операций поиска анкет по параметрам с полным подсчётом количества найденных анкет в секунду (это самая долгая операция, остальные работают значительно быстрее). Рабочая нагрузка — порядка 800 rps поиска + 1000 rps на получение места + 1500 rps на получение анкетных данных. Рис. 3 Вывод места анкеты в поисковой выдаче (график с одного сервера) Распределение полного времени ответа (т. е. с учётом сетевого взаимодействия) от всех (двух) поисковых серверов. найти девушку по параметрам