Добавить в корзинуПозвонить
Найти в Дзене
Алексей Атлетов

Apache Ignite. Глава 5. Ignite Persistence.

Общее представление Ignite Persistence или Native Persistence - это набор функций, предназначенных для обеспечения постоянного хранения. Когда он включен, Ignite всегда сохраняет все данные на диске и загружает столько данных, сколько может, в оперативную память для обработки. Например, если имеется 100 записей, а объем оперативной памяти позволяет хранить только 20, то все 100 хранятся на диске и только 20 кэшируются в оперативной памяти для повышения производительности. Когда Native Persistence отключена и внешнее хранилище не используется, Ignite ведет себя как чистое хранилище в памяти. Когда Persistence включена, на каждом узле сервера сохраняется подмножество данных, включающее только разделы, назначенные этому узлу (включая разделы резервного копирования, если резервное копирование включено). Native Persistence основана на следующих функциях: Включение Persistent Storage Native Persistence настраивается для каждой области данных. Чтобы включить постоянное хранилище, установите
Оглавление

Общее представление

Ignite Persistence или Native Persistence - это набор функций, предназначенных для обеспечения постоянного хранения. Когда он включен, Ignite всегда сохраняет все данные на диске и загружает столько данных, сколько может, в оперативную память для обработки. Например, если имеется 100 записей, а объем оперативной памяти позволяет хранить только 20, то все 100 хранятся на диске и только 20 кэшируются в оперативной памяти для повышения производительности.

Когда Native Persistence отключена и внешнее хранилище не используется, Ignite ведет себя как чистое хранилище в памяти.

Когда Persistence включена, на каждом узле сервера сохраняется подмножество данных, включающее только разделы, назначенные этому узлу (включая разделы резервного копирования, если резервное копирование включено).

Native Persistence основана на следующих функциях:

  • Хранение разделов данных на диске;
  • Ведение журнала с опережением записи;
  • Контрольная точка;
  • Использование подкачки ОС.

Включение Persistent Storage

Native Persistence настраивается для каждой области данных. Чтобы включить постоянное хранилище, установите для параметра persistenceEnabled значение true в конфигурации области данных. Вы можете одновременно иметь области данных в памяти и области данных с persistence.

Настройка Каталога Постоянного Хранилища

Когда сохраняемость включена, узел хранит пользовательские данные, индексы и файлы WAL в каталоге {IGNITE_WORK_DIR}/db. Этот каталог называется каталогом хранилища. Вы можете изменить каталог хранилища, установив свойство storagepath объекта DataStorageConfiguratio.

Журнал предварительной записи

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

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

WAL состоит из нескольких файлов (называемых активными сегментами) и архива. Активные сегменты заполняются последовательно и перезаписываются в циклическом порядке. Как только 1-й сегмент заполнен, его содержимое копируется в архив WAL (см. раздел Архив WAL ниже). В то время как 1-й сегмент копируется, 2-й сегмент обрабатывается как активный файл WAL и принимает все обновления, поступающие со стороны приложения. По умолчанию существует 10 активных сегментов.

Существует три режима WAL. Каждый режим отличается тем, как он влияет на производительность, и обеспечивает различные гарантии согласованности.

FSYNC - Изменения гарантированно сохраняются на диске при каждой атомарной записи или фиксации транзакции.

LOG_ONLY - Режим по умолчанию.

Изменения гарантированно будут сброшены либо в буферный кэш операционной системы, либо в файл с отображением в памяти для каждой атомарной записи или транзакции.

Сопоставленный с памятью подход к файлам используется по умолчанию и может быть отключен, установив системное свойство IGNITE_WAL_MMAP в значение false.

BACKGROUND - Когда свойство IGNITE_WAL_MMAP включено (по умолчанию), этот режим ведет себя как режим LOG_ONLY.

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

NONE - WAL отключен. Изменения сохраняются только в том случае, если вы корректно завершите работу узла. Используйте Ignite.active(false), чтобы деактивировать кластер и выключить узел.

-2

WAL архив

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

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

Изменение размера сегмента WAL

Размер сегмента WAL по умолчанию (64 МБ) может быть неэффективным в сценариях с высокой нагрузкой, поскольку это приводит к слишком частому переключению WAL между сегментами, а переключение/вращение является дорогостоящей операцией. Больший размер сегментов WAL может помочь повысить производительность при высоких нагрузках за счет увеличения общего размера файлов WAL и архива WAL.

Вы можете изменить размер файлов сегмента WAL в конфигурации хранилища данных. Значение должно быть от 512 КБ до 2 ГБ.

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

В следующих статьях мы это разберем более подробней.