среда, 30 апреля 2014 г.

In-Memory Database

    Программное обеспечение - не мой конек. Однако...

    Проект компании Microsoft, родившийся несколько лет назад и по дороге вроде бы умиравший, реализовался, таки. Имя ему Hecaton и представляет он собой набор инструментов (систему обработки транзакций в реальном времени, OLTP) для работы с базами данных в оперативной памяти.
    Тенденции последних лет - а) снижение стоимости оперативной памяти (RAM); б) резкое увеличение объема устанавливаемой в системе памяти (Супермикровая X9DR3-LN4F+ - до 1,5Tb, например. Со следующим поколением процессоров еще больше будет), позволяют обрабатывать довольно большие массивы данных без обращений к дисковой системе. Microsoft догоняющий в этом забеге, но хотя бы не аутсайдер!

    Hecaton полностью интегрирован в Microsoft SQL Server (так же, впрочем, как продукты конкурентов - Sybase Adaptive Server Enterprise, Oracle In-Memory Database Cache, например). Самый ощутимый эффект виден, конечно же, при использовании "своих" таблиц - они по структуре отличаются от традиционных SQL, но солидную прибавку в производительности может дать и комбинированное сочетание двух подходов. Причем, перестроение может проводиться поэтапно, т.к. происходит все в рамках одного программного продукта. Управление таблицами в оперативной памяти осуществляется процедурами библиотеки T-SQL.
    Что делали всегда для оптимизации производительности баз данных? Для временных таблиц и индексов выделяли отдельное быстрое хранилище или помещали их в эмулированный в оперативной памяти диск, если ее объем позволял. Теперь все может быть устроено за счет самой быстрой памяти совершенно естественным способом. В отличие от кэширования, которое ускоряет операции чтения, In-Memory Database позволяет как читать, так и записывать данные.



    Сценарий. Понятно, что критически важные данные необходимо сохранять в энергонезависимой памяти (диски, флэш). При этом существуют данные, ценность которых невелика или может быть воспроизведена без больших затрат. Вот их мы и будем обрабатывать очень быстро. Возьмем интернет-магазин. Запись об оплате заказа не может быть потеряна при сбое системы. Но к этой записи мы шли через многочисленные выборки из обширного каталога товаров, сравнения характеристик и цен, наполнения и очищения корзины. Все эти промежуточные данные имеют невеликую ценность и вполне могут обрабатываться в оперативной памяти.

    Железная поддержка. Помимо собственно пространства оперативной памяти, достаточного для размещения части или целой БД, используются некоторые механизмы, без которых эффект от от In-Memory Database был бы не столь впечатляющим. Транзакционная память (transactional memory) - механизм синхронизации записей на основе блокировки. Транзакция в данном случае - это частью кода, который выполняет считывание и запись в разделяемую (совместно используемую) память. Считывание и запись логически происходит в единичный момент времени, а промежуточные состояния невидимы для других транзакций. Аппаратная поддержка транзакционной памяти реализована Intel в микроархитектуре Haswell. Помимо основной памяти, приходится разбираться с конфликтами в кэшах, которых у процессора три - введен механизм когеррентности (Cache Coherency). И Intel и AMD используют для этого протокол MESI. Т.е., в обработку транзакций могут быть втянуты и кэш процессоров всех уровней!

    Овчинка и выделка.

  • Оперативная память все-таки дороже, чем SSD.
  • Объем оперативной памяти, хоть и расширяется с каждым поколением процессоров, ограничен сверху. Максимальный объем набирается модулями DDR емкостью в 32Гб, которые пока еще стоят несусветных денег. Ускорителями PCI или накопителями SSD можно набрать больший объем.
  • С другой стороны, как показывает статистика, большая доля баз данных не превышает в объеме 1Тб. 
  • !!!! Всегда надо помнить, что оперативная память все потеряет в случае сбоя или потери питиния системой. Критически значимые данные и результаты транзакций ДОЛЖНЫ обрабатываться традиционным способом - с использованием дисковых накопителей.



Транзакций/сек
К-во ядер24681012
SQL with contention98413631645187621182312
SQL without contention115321573161421150935834
Interop151829364273545967017709
Native70781389220919267213250736375


Данные испытаний взяты из материалов Microsoft.

    "Native" - "родной" формат Hecaton. Структура несколько отличается от традиционной SQL. "Interop" - компромиссный вариант обработки. Таблицы традиционной структуры SQL, но обрабатываются в оперативной памяти.
    Выводы:
- производительность, т.е. количество обработанных транзакций в секунду растет практически линейно вместе с количеством задействованных ядер процессоров. Средняя прибавка - 0,9...0,93 на ядро. Рост практически одинаков для всех вариантов расположения базы.
- переход на обработку в оперативной памяти дает очень солидную прибавку - от 7-кратной на двух ядрах до почти 16-кратной на 12 ядрах.
- производители "железа" подстраиваются под особенности ПО. Общими усилиями системы передвигаются на следующий уровень эффективности и производительности.



http://research.microsoft.com/pubs/193594/Hekaton%20-%20Sigmod2013%20final.pdf
http://www-db.in.tum.de/~leis/papers/HTM.pdf
http://www.sybase.ru/system/files/pdf/ase_getting_started_whitepaper_p2.pdf
http://oraclegis.com/temp/tat/In-memory%20DB%20cache%2011g%20rus.pdf

Комментариев нет:

Отправить комментарий