Презентация - Как, используя Lucene, построить высоконагруженную систему поиска разнородных данных

Смотреть слайды в полном размере
Презентация Как, используя Lucene, построить высоконагруженную систему поиска разнородных данных


Вашему вниманию предлагается презентация на тему «Как, используя Lucene, построить высоконагруженную систему поиска разнородных данных», с которой можно предварительно ознакомиться, просмотреть текст и слайды к ней, а так же, в случае, если она вам подходит - скачать файл для редактирования или печати.

Презентация содержит 20 слайдов и доступна для скачивания в формате ppt. Размер скачиваемого файла: 253.25 KB

Просмотреть и скачать

Pic.1
Как, используя Lucene, построить высоконагруженную систему поиска разнородных данных
Как, используя Lucene, построить высоконагруженную систему поиска разнородных данных
Pic.2
Одноклассники в цифрах Что у нас есть: 100 млн пользователей; 3. 3 млн групп; . . . . . 4. 1 млн пол
Одноклассники в цифрах Что у нас есть: 100 млн пользователей; 3. 3 млн групп; . . . . . 4. 1 млн пользователей онлайн; В секунду: 250. тыс. страниц, 50мс, 70Гбит/с; 6 тыс. сообщений и комментариев; 1. 5 тыс. поисковых запросов.
Pic.3
Зачем нам понадобились свои поисковые системы? Пользователь не всегда знает, как именно регистрирова
Зачем нам понадобились свои поисковые системы? Пользователь не всегда знает, как именно регистрировался искомый друг На сайте были огромные каталоги групп и сообществ Планировались новые сервисы, которым понадобится поиск Как правило, человек ищет то, что уже есть у кого-то из его друзей
Pic.4
Почему Lucene? Поиск по MS SQL базе был крайне медленным На Java написано 99% нашего кода, поэтому S
Почему Lucene? Поиск по MS SQL базе был крайне медленным На Java написано 99% нашего кода, поэтому Sphinx даже не смотрели Apachе Lucene/Solr поддерживаются большим сообществом и хорошо себя зарекомендовали Уже был опыт использования Solr Быстрый поиск других поисковых Java-проектов результатов не дал
Pic.5
Как устроен Lucene?
Как устроен Lucene?
Pic.6
Требования к системе индексов Отказоустойчивость и масштабируемость Высокая производительность поиск
Требования к системе индексов Отказоустойчивость и масштабируемость Высокая производительность поисковых серверов Гибкое индексирование Возможность сбора дополнительной информации перед индексацией Возможность анализа готового индекса
Pic.7
Что нас не устроило в Solr Solr: сервер использует только один процессор репликация индексов на bash
Что нас не устроило в Solr Solr: сервер использует только один процессор репликация индексов на bash-скриптах http - это дорого и медленно сложно модифицировать Но Lucene нас устраивает, поэтому пишем свой сервер
Pic.8
Архитектура
Архитектура
Pic.9
Требования к поисковой системе Отказоустойчивость Использование социального графа Эффективность Прос
Требования к поисковой системе Отказоустойчивость Использование социального графа Эффективность Простое изменение и расширение функциональности Сбор статистики по пользователям Высокая пропускная способность
Pic.10
Как работает поисковая система
Как работает поисковая система
Pic.11
Проблемы: работа с индексом Lucene активно читает файлы во время поиска Пробовали: Диск с FSDirector
Проблемы: работа с индексом Lucene активно читает файлы во время поиска Пробовали: Диск с FSDirectory и NIODirectory RamDrive с FSDirectory и NIODirectory Lucene RamDirectory Собственный UnsafeDirectory Победил: HeapDirectоry файлы как byte[] в хипе
Pic.12
Проблемы: ThreadLocal кэши Долгий GC из-за уймы мелких объектов в хипе Причины: Lucene использует Th
Проблемы: ThreadLocal кэши Долгий GC из-за уймы мелких объектов в хипе Причины: Lucene использует ThreadLocal кэши для некоторых объектов Jboss Remoting на каждое соединение содает поток, а их тысячи Первое решение: Пул для выполнения запросов Второе решение: Делая другую оптимизацию, убрали эти кэши
Pic.13
Проблемы: медленные хранимые поля Медленная работа с хранимыми полями Причина: При считывании храним
Проблемы: медленные хранимые поля Медленная работа с хранимыми полями Причина: При считывании хранимого поля создается много мусора и производятся ненужные операции Решение: Считывать значение в нужный тип сразу из byte[] Результат: На порядок быстрее стали операции с хранимыми полями Время GC упало в 2 раза
Pic.14
Распознавание полей Поиск пользователей идет по следующим полям: имя и фамилия, город, страна, интер
Распознавание полей Поиск пользователей идет по следующим полям: имя и фамилия, город, страна, интервал возростов Друга можно искать, вводя известные данные: «илья широков 30» «илья широков москва» «илья широков 25-30 россия»
Pic.15
Поиск по возрасту Стандартные решения: Добавление всех подходящих терминов Префиксные термины для сн
Поиск по возрасту Стандартные решения: Добавление всех подходящих терминов Префиксные термины для снижения количества терминов в запросе Запрос к FieldCache Фильтр результатов Наше решение: Возраст хранится ввиде даты: yyyymmdd Запрос по текстовым полям оборачивается в фильтрующий запрос, который проверяет отбраные документы по хранимому полю
Pic.16
Поиск музыки В базе есть: артисты; альбомы; композиции не сортированые музыкальные композиции Три то
Поиск музыки В базе есть: артисты; альбомы; композиции не сортированые музыкальные композиции Три точности совпадения: точное; все слова из запроса; некоторые слова из запроса Поиск всегда идет по всем видам документов От точности совпадения зависит поведение UI На место в выдаче влияет рейтинг документа С индекса собираются всевозможные топы
Pic.17
Индексация музыки Все храним в одном индексе У каждого документа: в id зашит его тип (артист; альбом
Индексация музыки Все храним в одном индексе У каждого документа: в id зашит его тип (артист; альбом; композиция; файл) тип как отдельное поле рейтинг как параметр индексации рейтинг как хранимое поле Текстовые поля: по отдельности необходимые комбинации 2 представления текста: оригинал + фонетика
Pic.18
Поиск музыки Пробовали: Отдельный запросы для каждого типа Повторные запросы с меньшей точностью Нас
Поиск музыки Пробовали: Отдельный запросы для каждого типа Повторные запросы с меньшей точностью Настройка оценщика веса для результата Решение: Запрос состоит из комбинаций: точность + поле данных Для каждой комбинации есть интервал значений весов Вес из подзапроса нормализуется в интервал комбинации Если документ отвечает запросу, сразу вычисляем его тип и добавляем в соответствующий коллектор
Pic.19
Поисковые сервера
Поисковые сервера
Pic.20
Как, используя Lucene, построить высоконагруженную систему поиска разнородных данных, слайд 20


Скачать презентацию

Если вам понравился сайт и размещенные на нем материалы, пожалуйста, не забывайте поделиться этой страничкой в социальных сетях и с друзьями! Спасибо!