ПИШЕМ САМЫЙ БЫСТРЫЙ хеш для кэширования данных Роман Елизаров Devexperts

Презентация:



Advertisements
Похожие презентации
Анализ вычислительной сложности алгоритмов Теория сложности вычислений.
Advertisements

Физические модели баз данных Файловые структуры, используемые для хранения информации в базах данных.
1 Разработка и анализ параллельных поисковых структур данных, не чувствительных к размеру кеша Акишев Искандер Рустемович Научный руководитель: Елизаров.
Тема урока: «Таблица умножения и деления на …» 2, 4, 6, 8, 10 1, 3, 5, 7, 9, 11 9, 18, 27,36, 45,54,63, 72, 81 9, 18, 27,36, 45,54,63, 72,
Введение в теорию компиляции Основные принципы построения трансляторов.
Рекомендации по работе со службой технической поддержки Шаромов Денис руководитель отдела техподдержки.
Использование технологии компиляции на этапе исполнения (JIT) для моделирования работы микропроцессоров. Студент 6го курса Ситало Алексей Юрьевич Научный.
Демидов А.В г. Операционные системы Лекция 4 Работа с файлами.
Д.з Язык С++ - занятие 31. Задача 1: 1/1 + 1/3 + 1/5 … #include using namespace std; int main() { int n; cin >> n; double sum = 0;// Сумма for.
Цели: отработать счёт, порядок действий, развивать умение быстро решать задачи. Тема урока: Закрепление таблицы умножения и деления.
Разбор заданий ЕГЭ Типичные задания С2. Содержание Перечень задач Задача 1 Задача 2 Задача 3 Решить самостоятельно Задача 4 Задача 5 Задача 6 Перечень.
Использование языка Си для программирования ЦСП TMS320C67x.
5 Интернет магазин: с чего начать и с кем делать. Или «почему ожидания отличаются от результата»? Роман Сухарь.
Язык программирования Pascal. Основные понятия Программа Компиляция Оператор Идентификатор Набор команд на языке программирования Перевод программы (целой)
«Повтори таблицу умножения». На 2 На 3 На 4 На 5 На 6 На 7 На 8 На 9 Выбери звезду!
Понятие о методах Монте-Карло. Расчет интегралов 2.5. Расчет интегралов методом Монте-Карло.
Сергей Сыроежкин Бизнес-аналитик, консультант В рамках курса лекций: «Разработка требований к программному обеспечению», мехмат, БГУ Спецификация.
Система фрагментированного программирования Перепелкин В.А. Всероссийская молодежная школа по параллельному программированию МО ВВС ИВМиМГ 2009 г.
Алгоритмизация и требования к алгоритму Алгоритм и алгоритмизация Алгоритм и алгоритмизация.
Хэш-таблицы и хэш-функции Лекция 3. Хеш-таблицы Для многих приложений достаточны динамические множества, поддерживающие только стандартные словарные операции.
Транксрипт:

ПИШЕМ САМЫЙ БЫСТРЫЙ хеш для кэширования данных Роман Елизаров Devexperts

Преждевременная оптимизация!

Проблемы со скоростью? Вам точно надо их решать? Какие?Почему?Где?

Формулируем задачу Четко. Кратко. Измеримо.

Пример задачи 1. Работаем с заявками 2. Их много, они нужны часто 3. Хотим их кэшировать в памяти

Моделируем нагрузку

Пример нагрузки ~1М заявок в кэше 10М запросов getById Геометрическое распределение id

Что будем измерять? ВремяПамять

Избежим типичных ошибок Помним JIT компиляция и оптимизация кода Сборка мусора

Так что будем измерять? Среднее время одной итерации

Пишем код для замеров

Ищем готовые решения

Разные реализации хеш-таблиц

Не цифрами едиными! RTSL

Что мешает скорости? Функционал Гарантии real-time Thread-safety

Вечный конфликт Универсальность Скорость

Дизайн своего решения Производительность никогда не появляется случайно, только по замыслу авторов.

Из чего складывается скорость? Алгоритм и структуры данных РеализацияРезультат

Выбираем алгоритм Д. Кнут «Искусство программирования» Т. Кормен и др. «Алгоритмы: построение и анализ» С. Скиена «Алгоритмы. Руководство по разработке»

Хеш-таблицы Прямая адресация Открытая адресация Линейное исследование Двойное хеширование

Хеш-таблицы Прямая адресация Открытая адресация Линейной исследование Двойное хеширование И что работает быстрее? А это зависит от реализации и железа

Что используют другие?

Память – это новый диск

Меньше памяти занимает – быстрее работает* * При прочих равных

Проверим …

Меньше памяти использует – быстрее работает* * При прочих равных

Порядок оптимизации при дизайне Занимаемая памятьИспользуемая памятьДругие детали

Выберем структуру данных Открытая адресация – один массив

Оценим потребление памяти

Выберем алгоритм (1) Линейное исследование Проще Доступ к соседним ячейкам Более чувствительно к качеству хеш-функции High-scale-lib, HPPC Двойное хеширование Больше кода В случае промаха прыгает в новое место Требует две независимые хеш-функции Trove

Выберем алгоритм (2) Хеш-функция умножением Быстрая Работает с таблицами размером 2 K Требует выбора магического числа- множителя Хеш-функция делением Медленней – Но память еще медленней! Лучше всего работает с таблицами простого размера Trove High-scale-lib – не использует хеш-функцию HPPC – использует MurmurHash3

Как их комбинировать? Линейное исследование Проще всего Двойное хеширование Хеш-функция умножением Хеш-функция делением

Напишем же!

Магия золотого сечения Равномерно размазывает последовательные числа по таблице

Замерим скорость

Важно распределение вероятности доступа к разным элементам Наиболее часто используемые заявки (последние) имеют соседние id

Каждая деталь имеет значение

А если набор часто используемых id случаен?

Общий процесс Формулировка задачи Модель нагрузки Готовые решения Структура данных Алгоритм Проверка и замеры* * Повторить с начала по необходимости

Спасибо за внимание Роман Елизаров Специальная благодарность: Денису Кисловскому

Все подробности, код и обсуждение: Ваши комментарии важны для меня Хотите знать больше?