1 / 41

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

ПИШЕМ САМЫЙ БЫСТРЫЙ хеш для кэширования данных. Роман Елизаров Devexperts http://elizarov.livejournal.com. Преждевременная оптимизация!. http://www.flickr.com/photos/lofink/4501610335/. http://odetocode.com/Blogs/scott/archive/2008/07/15/optimizing-linq-queries.aspx. Проблемы со скоростью ?.

kamal
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ПИШЕМ САМЫЙ БЫСТРЫЙхеш для кэширования данных Роман Елизаров Devexperts http://elizarov.livejournal.com

  2. Преждевременная оптимизация! http://www.flickr.com/photos/lofink/4501610335/ http://odetocode.com/Blogs/scott/archive/2008/07/15/optimizing-linq-queries.aspx

  3. Проблемы со скоростью?

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

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

  6. Моделируем нагрузку http://www.vsemayki.ru/product/19329/woman/

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

  8. Что будем измерять?

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

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

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

  12. Ищем готовые решения http://gizmod.ru/2009/05/29/zweistil--universalnyj_velosiped_s_motorchikom/

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

  14. Не цифрами едиными! RTSL http://www.cafepress.com/researchit.640209934

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

  16. Вечный конфликт

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

  18. Из чего складывается скорость?

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

  20. И что работает быстрее? А это зависит от реализации и железа

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

  22. Память – это новый диск http://www.flickr.com/photos/gudlyf/6687607947/lightbox/

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

  24. Проверим …

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

  26. Порядок оптимизации при дизайне

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

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

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

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

  31. Как их комбинировать?

  32. Напишем же!

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

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

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

  36. Каждая деталь имеет значение http://car-interior-supplies.carinteriorss.co.uk/detail/

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

  38. Общий процесс * Повторить с начала по необходимости

  39. Спасибо за внимание • РоманЕлизаров • elizarov@devexperts.com • Специальная благодарность: • Денису Кисловскому

  40. Хотите знать больше? Все подробности, код и обсуждение: http://elizarov.livejournal.com Ваши комментарии важны для меня

More Related