Перейти к основному содержимому

Разделенное хранение и вычисления

примечание

Эта страница переведена при помощи нейросети GigaChat.

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

warning

Данная возможность находится в экспериментальной стадии и должна использоваться с осторожностью.

Хранилище S3 не является обязательным требованием для использования OrioleDB. Это дополнительная возможность, которая может быть включена путем установки соответствующих параметров конфигурации.

Хранение данных базы данных в S3

OrioleDB имеет экспериментальную поддержку хранения всех данных таблиц и материализованных представлений в корзине S3. Это полезно для разделения экземпляров вычислений и хранения данных, повышения надежности данных, а также для масштабирования и изменения архитектуры вычислительных экземпляров с сохранением всех данных.

Локальное хранилище реализует кэширование наиболее часто используемых данных. Кроме того, оно обеспечивает добавление и обновление данных со скоростью записи в локальное хранилище, а не со скоростью передачи в S3. Данные синхронизируются с S3 асинхронно. Тем не менее, все требования целостности данных гарантируются также для данных на хранилище S3. Таким образом, можно подключить пустой экземпляр PostgreSQL (инициализированный с помощью описанной ниже утилиты) с расширением OrioleDB, настроенным на использование S3 с этой корзиной, и восстановить все данные из S3 в состоянии последней контрольной точки PostgreSQL.

Для использования функциональности S3 необходимо установить следующие параметры до создания таблиц и материализованных представлений orioledb:

  • orioledb.s3_mode – определяет использование режима S3. Принимает значения on и off. По умолчанию off;
  • archive_library = 'orioledb' – необходимо установить для использования режима S3;
  • archive_mode = on – необходимо установить для использования режима S3;
  • orioledb.s3_region – указывает регион S3, в котором создана корзина S3;
  • orioledb.s3_host – адрес точки доступа к корзине S3 (без префикса https://). Например, mybucket.s3-accelerate.amazonaws.com;
  • orioledb.s3_prefix – префикс для добавления к имени объекта S3 (может содержать имя корзины, если оно не указано в точке доступа);
  • orioledb.s3_use_https – использовать HTTPS для соединений S3 (в противном случае HTTP). По умолчанию on. Необходимо убедиться в соответствии с настройками сервера, особенно для соединений localhost;
  • orioledb.s3_accesskey – указывает ключ доступа AWS для аутентификации корзины;
  • orioledb.s3_secretkey – указывает секретный ключ AWS для аутентификации корзины;
  • orioledb.s3_num_workers – указывает количество рабочих процессов AWS для синхронизации данных с корзиной S3. Больше процессов может ускорить синхронизацию. Рекомендуемое значение – 20, которого достаточно в большинстве случаев;
  • orioledb.s3_desired_size – данный параметр определяет общий желаемый размер таблиц OrioleDB в локальном хранилище. При превышении этого ограничения фоновые рабочие процессы OrioleDB начнут вытеснять локальные данные в корзину S3. Данный механизм обеспечивает эффективное использование локального хранилища и бесшовную передачу данных в S3. Эффективная поддержка данного ограничения требует файловую систему, поддерживающую разреженные файлы;
  • max_worker_processes – ограничение PostgreSQL на максимальное количество рабочих процессов. Необходимо установить значение, достаточное для размещения дополнительных процессов orioledb.s3_num_workers и всех других рабочих процессов Postgres. Для начальной настройки установить значение, равное сумме orioledb.s3_num_workers и предыдущего значения max_worker_processes.

После установки указанных параметров GUC необходимо перезапустить postmaster. Затем все таблицы и материализованные представления, созданные с using orioledb, будут синхронизированы с корзиной S3.

CREATE TABLE s3_test
(
id int8 NOT NULL,
value1 float8 NOT NULL,
value2 text NOT NULL,
PRIMARY KEY(id)
) USING orioledb

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

Для достижения наилучших результатов рекомендуется включить Transfer acceleration (ускорение передачи) в настройках General (Общие) корзины AWS S3 (адрес точки доступа будет содержать суффикс s3-accelerate.amazonaws.com), а также разместить корзину и вычислительный экземпляр в одном регионе AWS. Еще лучшим решением является использование корзины AWS Directory в том же регионе и подрегионе AWS, что и вычислительный экземпляр.

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

Как указано выше, режим S3 в настоящее время является экспериментальным. Основные ограничения данного режима приведены ниже.

  1. Хотя таблицы и материализованные представления OrioleDB хранятся инкрементально в корзине S3, история сохраняется навсегда. В настоящее время отсутствует механизм безопасного удаления старых данных.
  2. В конфигурации основной/реплики каждый экземпляр должен использовать отдельную корзину S3.

Все указанные ограничения являются временными и будут удалены в дальнейших версиях.

Утилита загрузки S3

Утилита загрузки S3 позволяет получить данные из корзины S3 на любой локальный компьютер в указанную директорию.

Для ее использования необходимо установить boto3 и testgres в Python:

pip install boto3 testgres

Запустить скрипт с теми же параметрами, что и в конфигурации кластера PostgreSQL S3:

  • AWS_ACCESS_KEY_ID – то же значение, что и orioledb.s3_accesskey;
  • AWS_SECRET_ACCESS_KEY – то же значение, что и orioledb.s3_secretkey;
  • AWS_DEFAULT_REGION – то же значение, что и orioledb.s3_region;
  • --endpoint – то же значение, что и orioledb.s3_host (полный URL с префиксом https:// или http://). Например, --endpoint=https://mybucket.s3-accelerate.amazonaws.com или --endpoint=https://mybucket.s3.amazonaws.com или для локального экземпляра --endpoint=http://localhost:PORT;
  • --prefix – необязательный префикс для добавления к путям объектов (может содержать имя корзины, если оно не указано в точке доступа). Например, --endpoint=https://mybucket.s3-accelerate.amazonaws.com или --endpoint=https://mybucket.s3.amazonaws.com;
  • --bucket-name – имя корзины S3 из orioledb.s3_host. Например, --bucket-name=mybucket;
  • --data-dir – целевая директория на локальном компьютере для записи данных. Например, --data-dir=mydata/;
  • --verbose – опционально выводит расширенную информацию.
AWS_ACCESS_KEY_ID=<your access key> AWS_SECRET_ACCESS_KEY='<your secret key>' AWS_DEFAULT_REGION=<your region> python orioledb_s3_loader.py --endpoint=https://<your-bucket-endpoint> --data-dir='orioledb_data' --verbose