dump-2013 Наука и жизнь - Найти за одну секунду - Бугай...
TRANSCRIPT
Найти за одну секунду или интеллектуальный поиск данных в многогигабайтном массиве данных
своими руками
Владимир БугайKnoema
Что такое Нома?
Knoema.com – это веб-сайт, где можно найти открытые данные на любую тему для любой страны мира из кучи разных источников
У нас собран самый большой репозиторий статистических данных в мире и контента, сделанного на их основе
Несколько метрик
Количество наборов данных – 2500+ Количество временных рядов – 100M+ Размер базы – 50Gb+
И все это растет десятками процентов в месяц
Проблема
Навигация, рубрикатор, теги, темы – это все замечательно, но ведь никто сейчас не пользуется каталогами, а идут сразу на Google и Yandex. Не так ли?
Нам нужен поиск!
Демо
Демо
Демо
Особенности поиска в нашей системе
Мало текста, много цифр Очень много повторяющихся терминов
«United States», например, повторяется 150000 раз. Какой результат выбрать?
Причины реализации собственного движка
Необходимость собственного, сильно специфического алгоритма ранжирования Алгоритм ранжирования в поиске – это одно из
наших ключевых ноу-хау Специальные возможности Высокое быстродействие на ограниченных
ресурсах железа
Ключевое требование
Скорость, скорость и еще раз скорость Значительная часть запросов должна выполняться
за 1-2 сек. Подавляющее большинство запросов должны
выполняться в пределах 5 сек.
Этап 1: Поиск внутри сервера приложений
Сервер приложений
Кэш индекса
База данных
Индекс
Данные
Сервис индексирова
ния
Запрос Ответ
Этап 2: Отдельный поисковый сервер
Сервер приложений
База данных
Индекс
Данные
Сервис индексирова
ния
Запрос Ответ
Поисковый сервер
Индекс
Этап 3: Индексация на лету
Сервер приложений
База данных
Данные
Запрос Ответ
Поисковый сервер
Индекс
Внутренняя реализация
0,85 0,97 0,58 0,96 0,91 0,41 0,26 0,98 0,35 0,45 min=0,95
Внутренняя реализация
0,98 0,97 0,96
0,99 0,98 0,97
Результаты
• Реализован относительно быстрый поиск на слабом оборудовании
• Архитектура поиска выстроена для дальнейшего горизонтального масштабирования