ПИШЕМ САМЫЙ БЫСТРЫЙ   хеш для кэширования данных          Роман Елизаров             Devexperts   http://elizarov.livejour...
Преждевременная оптимизация!                                            http://www.flickr.com/photos/lofink/4501610335/   ...
Проблемы со скоростью?                      Где?        Почему?                  Какие?   Вам точно надо их решать?
Формулируем задачуЧетко. Кратко. Измеримо.
Пример задачи1. Работаем с заявками        2. Их много, они нужны часто             3. Хотим их кэшировать в памяти
Моделируем нагрузку      http://www.vsemayki.ru/product/19329/woman/
Пример нагрузки~1М заявок в кэше10М запросов getByIdГеометрическое распределение id
Что будем измерять?  Время    Память
Избежим типичных ошибокПомним• JIT компиляция и оптимизация кода• Сборка мусора
Так что будем измерять?Среднее время одной итерации
Пишем код для замеров
Ищем готовые решения    http://gizmod.ru/2009/05/29/zweistil--universalnyj_velosiped_s_motorchikom/
Разные реализации хеш-таблиц                   Время, нс на операцию600                                                   ...
Не цифрами едиными! RTSL        http://www.cafepress.com/researchit.640209934
Что мешает скорости?                   Время, нс на операцию600           Функционал                     Гарантии real-tim...
Вечный конфликтУниверсальность                  Скорость
Дизайн своего решенияПроизводительность никогда   не появляется случайно, только по замыслу авторов.
Из чего складывается скорость?Алгоритм иструктуры    Реализация   Результат данных
Выбираем алгоритм• Д. Кнут  «Искусство программирования»• Т. Кормен и др.  «Алгоритмы: построение и анализ»• С. Скиена  «А...
Хеш-таблицы Прямая             Открытая адресацияадресация              Линейное       Двойное            исследование   х...
Хеш-таблицы      И что работает быстрее? Прямая А это зависит от              Открытая адресацияадресация       реализации...
Что используют другие?                   Время, нс на операцию600         Прямая адресация500      Открытая адресация40030...
Память – это новый диск                  http://www.flickr.com/photos/gudlyf/6687607947/lightbox/
Меньше памяти занимает –                   быстрее работает** При прочих равных
Проверим …                   Занимая память x100 KB800700600500400300200100 0      HashMap   Guava   high-scale-lib   Trov...
Меньше памяти использует –                    быстрее работает** При прочих равных
Порядок оптимизации при дизайнеЗанимаемая память  Используемая память     Другие детали
Выберем структуру данных Открытая адресация – один массив
Оценим потребление памяти             Занимая память x100 KB800700600500400300200100  0
Выберем алгоритм (1)Линейное исследование     Двойное хеширование• Проще                   • Больше кода• Доступ к соседни...
Выберем алгоритм (2)Хеш-функция умножением       Хеш-функция делением• Быстрая                    • Медленней• Работает с ...
Как их комбинировать?               Проще всего  Линейноеисследование  Двойноехеширование               Хеш-функция   Хеш-...
Напишем же!
Магия золотого сечения             5 1              2     Равномерно размазываетпоследовательные числа по таблице
Замерим скорость                  Время, нс на операцию800700600                                508500         459400300  ...
Важно распределениевероятности доступа к разным         элементам  Наиболее часто используемые      заявки (последние)    ...
Каждая деталь имеет значение                     http://car-interior-supplies.carinteriorss.co.uk/detail/
А если набор часто используемых           id случаен?                  Время, нс на операцию800700600                     ...
Общий процесс     Формулировка                   Модель      Готовые        задачи                      нагрузки    решени...
Спасибо за внимание      Роман Елизаров elizarov@devexperts.comСпециальная благодарность:   Денису Кисловскому
Хотите знать больше?Все подробности, код и обсуждение:    http://elizarov.livejournal.comВаши комментарии важны для меня
Upcoming SlideShare
Loading in...5
×

Пишем самый быстрый хеш для кэширования данных

2,276

Published on

Типичный случай — приложению работающему с БД некоторые объекты нужны так часто, то их необходимо кэшировать в памяти. В этом случае их кладут в структуру данных типа хэш. Однако, бывают случаи, когда даже поиск в этом хэше становится узким местом приложения и решения из стандартных библиотек перестают устраивать по своей производительности.

Основной упор доклада будет не на конкретный алгоритм, а на та техниках дизайна быстрых алгоритмов — на что надо обращать внимание, как вообще подходить к решению подобных задач.

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,276
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
0
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Пишем самый быстрый хеш для кэширования данных

  1. 1. ПИШЕМ САМЫЙ БЫСТРЫЙ хеш для кэширования данных Роман Елизаров Devexperts http://elizarov.livejournal.com
  2. 2. Преждевременная оптимизация! http://www.flickr.com/photos/lofink/4501610335/ http://odetocode.com/Blogs/scott/archive/2008/07/15/optimizing-linq-queries.aspx
  3. 3. Проблемы со скоростью? Где? Почему? Какие? Вам точно надо их решать?
  4. 4. Формулируем задачуЧетко. Кратко. Измеримо.
  5. 5. Пример задачи1. Работаем с заявками 2. Их много, они нужны часто 3. Хотим их кэшировать в памяти
  6. 6. Моделируем нагрузку http://www.vsemayki.ru/product/19329/woman/
  7. 7. Пример нагрузки~1М заявок в кэше10М запросов getByIdГеометрическое распределение id
  8. 8. Что будем измерять? Время Память
  9. 9. Избежим типичных ошибокПомним• JIT компиляция и оптимизация кода• Сборка мусора
  10. 10. Так что будем измерять?Среднее время одной итерации
  11. 11. Пишем код для замеров
  12. 12. Ищем готовые решения http://gizmod.ru/2009/05/29/zweistil--universalnyj_velosiped_s_motorchikom/
  13. 13. Разные реализации хеш-таблиц Время, нс на операцию600 508500 459400300 216200 156 143 101100 0 HashMap Guava high-scale-lib Trove Javolution HPPC
  14. 14. Не цифрами едиными! RTSL http://www.cafepress.com/researchit.640209934
  15. 15. Что мешает скорости? Время, нс на операцию600 Функционал Гарантии real-time500400300200 Thread-safety100 0 HashMap Guava high-scale-lib Trove Javolution HPPC
  16. 16. Вечный конфликтУниверсальность Скорость
  17. 17. Дизайн своего решенияПроизводительность никогда не появляется случайно, только по замыслу авторов.
  18. 18. Из чего складывается скорость?Алгоритм иструктуры Реализация Результат данных
  19. 19. Выбираем алгоритм• Д. Кнут «Искусство программирования»• Т. Кормен и др. «Алгоритмы: построение и анализ»• С. Скиена «Алгоритмы. Руководство по разработке»
  20. 20. Хеш-таблицы Прямая Открытая адресацияадресация Линейное Двойное исследование хеширование
  21. 21. Хеш-таблицы И что работает быстрее? Прямая А это зависит от Открытая адресацияадресация реализации и железа Линейной Двойное исследование хеширование
  22. 22. Что используют другие? Время, нс на операцию600 Прямая адресация500 Открытая адресация400300200100 0 HashMap Guava high-scale-lib Trove Javolution HPPC
  23. 23. Память – это новый диск http://www.flickr.com/photos/gudlyf/6687607947/lightbox/
  24. 24. Меньше памяти занимает – быстрее работает** При прочих равных
  25. 25. Проверим … Занимая память x100 KB800700600500400300200100 0 HashMap Guava high-scale-lib Trove Javolution HPPC
  26. 26. Меньше памяти использует – быстрее работает** При прочих равных
  27. 27. Порядок оптимизации при дизайнеЗанимаемая память Используемая память Другие детали
  28. 28. Выберем структуру данных Открытая адресация – один массив
  29. 29. Оценим потребление памяти Занимая память x100 KB800700600500400300200100 0
  30. 30. Выберем алгоритм (1)Линейное исследование Двойное хеширование• Проще • Больше кода• Доступ к соседним • В случае промаха прыгает ячейкам в новое место• Более чувствительно к • Требует две независимые качеству хеш-функции хеш-функции• High-scale-lib, HPPC • Trove
  31. 31. Выберем алгоритм (2)Хеш-функция умножением Хеш-функция делением• Быстрая • Медленней• Работает с таблицами – Но память еще медленней! размером 2K • Лучше всего работает с• Требует выбора таблицами простого магического числа- размера множителя • Trove High-scale-lib – не использует хеш-функцию HPPC – использует MurmurHash3
  32. 32. Как их комбинировать? Проще всего Линейноеисследование Двойноехеширование Хеш-функция Хеш-функция умножением делением
  33. 33. Напишем же!
  34. 34. Магия золотого сечения 5 1 2 Равномерно размазываетпоследовательные числа по таблице
  35. 35. Замерим скорость Время, нс на операцию800700600 508500 459400300 216200 143 156 101 83100 0
  36. 36. Важно распределениевероятности доступа к разным элементам Наиболее часто используемые заявки (последние) имеют соседние id
  37. 37. Каждая деталь имеет значение http://car-interior-supplies.carinteriorss.co.uk/detail/
  38. 38. А если набор часто используемых id случаен? Время, нс на операцию800700600 529500 463400300 253200 162 125 158 81100 0
  39. 39. Общий процесс Формулировка Модель Готовые задачи нагрузки решения Структура Проверка и Алгоритм данных замеры** Повторить с начала по необходимости
  40. 40. Спасибо за внимание Роман Елизаров elizarov@devexperts.comСпециальная благодарность: Денису Кисловскому
  41. 41. Хотите знать больше?Все подробности, код и обсуждение: http://elizarov.livejournal.comВаши комментарии важны для меня

×