IMDB (In-memory Database)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 19:49, 17 января 2019.

База данных в памяти (англ. In-memory database, IMDB) — это система управления базами данных, которая при хранении компьютерных данных в основном полагается на оперативную память. Она выделяется на фоне СУБД, в которых используется механизм дискового хранения. Базы данных в памяти быстрее, чем базы данных, оптимизированные для использования дисковых накопителей, поскольку доступ к диску медленнее, чем доступ к памяти, а внутренние алгоритмы оптимизации проще и выполняют меньше инструкций ЦП. Доступ к данным из памяти исключает время на поиск при их запросе, что обеспечивает более быструю и предсказуемую работу, чем при использовании дискового накопителя.

IMDB в основном используются в приложениях, в которых время отклика критически важно, таких как устройства телекоммуникационных сетей и сети мобильной рекламы. IMDB стали особенно востребованными в области аналитики данных, начиная с середины 2000-х годов - в основном благодаря многоядерным процессорам, которые могут обращаться к большому объему памяти, и менее дорогостоящей ОЗУ.

Потенциальным техническим препятствием при хранении данных в оперативной памяти является её энергозависимость. В частности, в случае прекращения электропитания, преднамеренного или нет, данные, хранящиеся в ОЗУ, будут потеряны.

База данных в памяти также может быть известна как база данных основной памяти (англ. main memory database, MMDB), база данных реального времени (англ. real-time database, RTDB) или система базы данных в памяти (англ. in-memory database system, IMDS).

Особенности

Базы данных в памяти предназначены для достижения минимального времени отклика, а также чрезвычайно высокой пропускной способности для систем, критичных к производительности. Это возможно потому, что данные сохраняются и обрабатываются в форме, используемой приложением, что устраняет накладные расходы, связанные с переводом и кэшированием. Технология IMDB способна поддерживать развертывание на уровне приложений, управление данными в режиме реального времени и большинство свойств ACID.

Структуры данных и алгоритмы IMDB предназначены исключительно для обеспечения управления данными, событиями и транзакциями на уровне приложений. По сравнению с полностью кэшированными системами управления реляционными базами данных, IMDB используют значительно меньше ресурсов ЦП. Технология IMDB не использует магнитные диски, как место для хранения первичной базы данных. Вместо этого магнитные диски используются для обеспечения стойкости и восстановления.[Источник 1]

Поддержка ACID

IMDB часто поддерживают 3 свойства ACID: атомарность, согласованность и изолированность. Однако, по умолчанию они не поддерживают свойство «долговечность», т.к. хранят данные на устройствах с энергозависимой памятью, которые теряют всю хранящуюся на них информацию, когда отключаются от питания или сбрасываются.

Для реализации поддержки «долговечности» используются следующие механизмы:

  • Снимки файловой системы или точки восстановления (запись состояния базы данных в заданный момент времени)
Система генерирует их периодически или при контролируемом выключении. Таким образом обеспечивается лишь частичная «долговечность», т.к. при сбое системы база данных не теряет все данные, но последние изменения все же будут утеряны. Для полноценной реализации свойства «долговечность» данный механизм дополнительно нуждается в одном из следующих:
  • Ведение журнала транзакций
Для облегчения автоматического восстановления базы данных в памяти все её изменения записываются в файл журнала транзакций.
  • Энергонезависимая память DIMM (NVDIMM)
Для обеспечения энергонезависимой безопасности данных используются модули памяти с интерфейсом DRAM в сочетании с флэш-памятью NAND. В качестве резервного источника питания вместо батареи они используют ионисторы.
  • Энергонезависимая память с произвольным доступом (NVRAM)
Представляет собой статическое ОЗУ с резервным питанием от батареи (ОЗУ с батареей) или электрически стираемое ПЗУ (EEPROM).

С помощью хранилищ с энергонезависимой памятью IMDB может безопасно восстановить своё состояние после перезагрузки системы.

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

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

Гибриды с дисковыми базами данных

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

Гибкость гибридного подхода позволяет добиться баланса между:

  • производительностью, которая улучшается путем сортировки, хранения и извлечения конкретных данных целиком в оперативной памяти, а не на диске;
  • стоимостью, т.к. менее дорогой жесткий диск может быть заменен большим объемом оперативной памяти;
  • постоянством;
  • форм-фактором, т.к. чипы ОЗУ не могут достичь той же плотности хранения данных, что и у жестких дисков.

В индустрии облачных вычислений появились термины «температура данных» или «горячие данные» и «холодные данные», чтобы классифицировать данные с точки зрения частоты обращений к ним. Горячие данные используются для обозначения критически важных данных, к которым часто обращаются, в то время как холодные данные обозначают данные, которые необходимы реже или менее срочно, например данные, хранящиеся для целей архивирования или аудита. Горячие данные должны храниться способами, предполагающими быстрое извлечение и модификацию. Холодные же данные могут храниться более экономичным способом, и считается, что доступ к таким данным, скорее всего, будет медленнее по сравнению с горячими данными.

В итоге, если какому-либо устройству, особенно из линейки потребительской электроники, требуется система базы данных, производитель может использовать гибридную систему средней стоимости, вместо того, чтобы использовать отдельные дорогостоящие базы данных в оперативной памяти или малопроизводительные базы данных на диске.

Первой подсистемой хранения с поддержкой таблиц и в памяти, и на дисках в единой базе данных была WebDNA, выпущенная в 1995 г.

Стойкие базы данных в памяти

Рисунок 1 – Стойкие IMDB

Схематический вид стойких IMDB представлен на рисунке 1. Их основная идея состоит в следующем: все данные также хранятся в оперативной памяти, но в дополнение к этому каждая операция сохраняется на диске в журнале транзакций. Первое, что можно заметить - после приобретения свойства стойкости запросы к вашей базе данных не стали обрабатываться медленнее, потому что обращения по-прежнему производятся только к оперативной памяти. Однако, в случае модификации данных, изменения должны не только применяться к оперативной памяти, но также сохраняться на диске. Является ли медленный диск в этом случае проблемой?

Рисунок 2 – Сохранение транзакций на диске

На рисунке 2 показана схема добавления транзакций в журнал. Транзакции всегда добавляются конец файла журнала, что обеспечивает достаточно быструю работу с дисками. Если говорить об обычных магнитных жестких дисках (HDD), то они могут записывать в конец файла со скоростью 100 МБ/с. Таким образом, магнитные диски достаточно быстрые, если они записывают данные последовательно. С другой стороны, они крайне медленные, если делают это произвольно. Такие диски обычно могут выполнять лишь около 100 операций с произвольным доступом в секунду.

Если рассматривать твердотельные накопители (SSD), то ситуация будет лучше в связи с отсутствием подвижных частей. Но соотношение лучшего/худшего случаев остается схожим: последовательный доступ производится со скоростью 200-300 МБ/с, а произвольный - со скоростью 1000-10000 запросов в секунду [Источник 2].

Итак, достаточно ли того, чтобы транзакции записывались на диск со скоростью 100 МБ/с? Например, если одна транзакция весит 100 байт, то это миллион транзакций в секунду. Это число настолько велико, что можно быть абсолютно уверенным в том, что диск никогда не станет "узким местом" базы данных в памяти[1].

Таким образом, стойкие базы данных в памяти могут быть действительно быстрыми при выполнении операций чтения/записи, т.е. такими же быстрыми, как и обычные базы данных в памяти, при этом очень эффективно используя диск и не делая его узким местом.

Использование NVDIMM флэш-памяти в IMBD

Существуют два основных требования к хранению базы данных в памяти: постоянный носитель для хранения зафиксированных транзакций, что обеспечивает долговечность и для целей восстановления, если базу данных необходимо перезагрузить в память, и постоянное хранилище для хранения копии или резервной копии базы данных в полном объеме.

Наилучшим носителем информации в этом случае является флэш-память. Перемещение флэш-памяти ближе к процессору уменьшает задержку, поэтому PCIe SSD или устройства хранения данных NVDIMM, работающие по каналу памяти, обеспечивают минимально возможное её значение.

Хранилище канала памяти помещает флэш-память в оборудование, которое использует форм-фактор DIMM, и подключается непосредственно к материнской плате сервера, обеспечивая твердотельное хранилище на шине DRAM. Это приводит к чрезвычайно низкой задержке операций ввода-вывода, но требует изменений BIOS и драйверов операционной системы, чтобы позволить ОС идентифицировать память как энергонезависимую. Изменения BIOS необходимы для предотвращения сбоя памяти сервера при проверках во выполнения POST.

Что касается требования о более быстрой перезагрузке баз данных, то, очевидно, флэш-память также имеет здесь преимущество. Чтение всей базы данных в память из флэш-памяти всегда будет намного быстрее, чем с дискового накопителя.

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

Преимущества и недостатки IMDB

  • С точки зрения записи и чтения с диска, IMDB быстрее, чем дисковые СУБД, даже если машина, на которой размещена СУБД, имеет на борту столько памяти, что в неё помещаются все данные.
  • IMDB может эффективно сохранять данные на жестком диске. Дисковая СУБД обычно не так эффективно работает с жесткими дисками и требует SSD (или других быстрых хранилищ, таких как SAS или флэш-память).
  • IMDB обычно плохо масштабируется на нескольких ядрах ЦП [Источник 3].
  • IMDB не будет работать, если все данные не помещаются в оперативную память.

Сценарии использования

Ставки в реальном времени

Ставки в реальном времени означают покупку и продажу показов онлайн-рекламы. Обычно ставку нужно делать, пока пользователь загружает веб-страницу, т.е. за 100-120 миллисекунд, а иногда и за 50 миллисекунд. В течение этого периода времени приложения ставок в режиме реального времени запрашивают у всех покупателей ставки на рекламное место, выбирают выигрышную ставку на основе нескольких критериев, отображают ставку и собирают информацию после показа рекламы. Базы данных в памяти являются идеальным выбором для приема, обработки и анализа данных в реальном времени с задержкой менее миллисекунды.

Игровые рейтинговые таблицы

Относительная рейтинговая таблица в играх показывает позицию игрока относительно других игроков аналогичного ранга. Такие таблицы могут помочь привлечь игроков и тем самым не дать геймерам стать демотивированными по сравнению только с лучшими игроками. Для игр с миллионами игроков базы данных в памяти могут быстро доставлять результаты сортировки и обновлять рейтинговую таблицу в режиме реального времени.

Кэширование

Кэш-память - это высокоскоростной слой хранения данных, в котором хранится подмножество данных, как правило, переходного характера, поэтому будущие запросы на эти данные обслуживаются быстрее, чем это возможно при помощи доступа к основному месту хранения данных. Кэширование позволяет эффективно повторно использовать ранее извлеченные или вычисленные данные. Данные в кэш-памяти обычно хранятся в высокоскоростных устройствах хранения, таких как ОЗУ, и также могут использоваться в корреляции с программным компонентом. Основная цель кэша - повысить производительность извлечения данных за счет уменьшения необходимости доступа к нижележащему более медленному уровню хранения.

Примечания

Источники

  1. What is an In-Memory Database? - Definition from Techopedia // Techopedia. [2018-2018]. Дата обновления: 15.10.2018. URL: https://www.techopedia.com/definition/28541/in-memory-database (дата обращения: 27.12.2018).
  2. IOPS // Wikipedia. [2018-2018]. Дата обновления: 07.09.2018. URL: https://en.wikipedia.org/wiki/IOPS (дата обращения: 29.11.2018).
  3. When and why I use an in-memory database or a traditional database management system // Medium. [2016-2016]. Дата обновления: 20.12.2016. URL: https://medium.com/@denisanikin/when-and-why-i-use-an-in-memory-database-or-a-traditional-database-management-system-5737f6d406b5 (дата обращения: 23.12.2018).

Ссылки