хранение и обработка больших объемов данных в...

21
Хранение и обработка больших объемов данных в рекомендательном движке сайта Imhonet.ru Дмитрий Исайкин

Upload: ontico

Post on 07-Nov-2014

3.072 views

Category:

Technology


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: хранение и обработка больших объемов данных в рекомендательном движке сайта Imhonet

Хранение и обработка больших объемов данных в

рекомендательном движке сайта Imhonet.ru

Дмитрий Исайкин

Page 2: хранение и обработка больших объемов данных в рекомендательном движке сайта Imhonet

Функции сервиса• Анализирует индивидуальный вкус и

предпочтения пользователя• Подбирает пользователей со схожими вкусами и

интересами• Предоставляет персональные рекомендации по

объектам

Удобная альтернатива классическим поисковикам

Page 3: хранение и обработка больших объемов данных в рекомендательном движке сайта Imhonet

Функциональные компоненты рекомендательного сервиса

Рекоменда-тельныйдвижок

Сайт Imhonet

Коннектор

Сайты-партнеры

Пользователи

Page 4: хранение и обработка больших объемов данных в рекомендательном движке сайта Imhonet

Что нужно для расчета рекомендаций

Чем больше оценок, тем точнее рекомендации

Page 5: хранение и обработка больших объемов данных в рекомендательном движке сайта Imhonet

Расчет рекомендацийПостроение референтной группыпоиск оценок на объекты, оцененные клиентом — поиск кандидатовпоиск оценок кандидатов и сравнение их с оценками клиента

!!!???

Запрос

Другиепользователи

Построение рекомендацийпоиск оценок референтовРеференты

Page 6: хранение и обработка больших объемов данных в рекомендательном движке сайта Imhonet

Алгоритм в разрезе доступа к данным

Ср. кол-во оценок у объекта = 1000

Ср. кол-во оценок у субъекта = 100

Количество обращений к оценкам:

100 запросов к объектам

6 000 запросов к субъектам + сравнение их оценок

Page 7: хранение и обработка больших объемов данных в рекомендательном движке сайта Imhonet

SQL Файл ОЗУНадежность решения + – +/–

Быстрота доступа к данным – – +

Использование оперативной памяти мало мало много

Компактность хранения данных +/– + +

Возможности оптимизации под задачу +

+/– –

Накладные расходы много много очень мало

–/+ –/+

Масштабируемость –/+

Где хранить оценки?

Page 8: хранение и обработка больших объемов данных в рекомендательном движке сайта Imhonet

Зачем делать самому?+ Только нужный функционал+ Минимум побочных расходов+ Оптимизация под задачу+ Быстрота исправления ошибок+ Простота API контейнера+ Никакого администрирования– Затраты на разработку и поддержку– Проблемы масштабирования

Не очень много:менее 900 строккода на всё

Запас на год-два.Проблема ужерешается

Page 9: хранение и обработка больших объемов данных в рекомендательном движке сайта Imhonet

Проектирование контейнера• Ассоциативный массив• Матрица

Требуются только выборки оценок по конкретному пользователю/объекту

Матричное представление более предпочтительно

Page 10: хранение и обработка больших объемов данных в рекомендательном движке сайта Imhonet

Проектирование контейнера.Анализ структуры оценок

Пользователи

1 2 3 4 5 6 7

Объекты

1 +5 +2 +52 -5

3 -2

4 +1 +4 +3

5 +2

6 -1

7 +3 +3

Будем хранить оценки в разреженной матрице

Page 11: хранение и обработка больших объемов данных в рекомендательном движке сайта Imhonet

Пользователи

1 2 3 4 5 6 7Объекты

1 +5 +2 +52 -5

3 -2

4 +1 +4 +3

5 +2

6 -1

7 +3 +3

Проектирование контейнера.Разреженная матрица

Page 12: хранение и обработка больших объемов данных в рекомендательном движке сайта Imhonet

Проектирование контейнера.Анализ паттернов доступа

Требуется максимальная скорость просмотра оценок пользователя

Будем хранить оценки в массиве пар (произведение, оценка)

объект оценка оценкапользователь

объект

Page 13: хранение и обработка больших объемов данных в рекомендательном движке сайта Imhonet

Проектирование контейнера.Анализ паттернов доступа

Требуется быстрое сравнение оценок двух пользователей

Будем хранить оценки упорядоченными по идентификаторам

5 оценка 8 оценкапользователь

Page 14: хранение и обработка больших объемов данных в рекомендательном движке сайта Imhonet

Проектирование контейнераТребуется быстрый поиск оценок

пользователей/произведений+

не все пользователи/произведения имеют оценки

Будем хранить ссылки на пользовательские оценки в хэш-таблице

Page 15: хранение и обработка больших объемов данных в рекомендательном движке сайта Imhonet

Что мы получилиhash_map< subj,

array< pair<obj, rate>

> >– Не является потокобезопасным

Page 16: хранение и обработка больших объемов данных в рекомендательном движке сайта Imhonet

Способы обеспечения безопасной многопоточности Взаимоисключающая блокировка

Блокировка на чтение-запись

Copy and Swap

Page 17: хранение и обработка больших объемов данных в рекомендательном движке сайта Imhonet

Изменение данных без блокировки читателей

• Блокируем на запись• Создаем копию оценок пользователя• Вносим изменения в копию• Подменяем старые оценки на новые• Используем механизм подсчета ссылок

для автоматического удаления неиспользуемой старой копии оценок

Page 18: хранение и обработка больших объемов данных в рекомендательном движке сайта Imhonet

Изменения в структуредля обеспечения CAS

hash_map< subj, ref_count_ptr<

array<pair<obj, rate>

> > >

Page 19: хранение и обработка больших объемов данных в рекомендательном движке сайта Imhonet

Сравнение с MySQLКонфигурация MySQL: таблица MyISAM, файл базы в памяти, индекс и по субъектам, и по

объектамВходные данные: лог запросов к оценкам при реальном расчете

рекомендаций в движке.Один поток исполнения. Только

чтение

Page 20: хранение и обработка больших объемов данных в рекомендательном движке сайта Imhonet

Результаты:операций в секунду

Оценок: 10.5 миллионовЗапросов к данным: 4.2 миллионаРассчитанных рекомендаций: 700 636 000

9500

Контейнер

операций чтенияДвижок

вычислений

MySQL504 оп.чтения

Page 21: хранение и обработка больших объемов данных в рекомендательном движке сайта Imhonet

Спасибо за внимание!

Вопросы?

Дмитрий Исайкин[email protected]