Разделенное хранение и вычисления
Эта страница переведена при помощи нейросети GigaChat.
Одной из возможностей, предоставляемых OrioleDB, является разделенное хранение и вычисления. Это достигается за счет размещения данных в отдельном слое хранения, например S3, и выполнения вычислительного слоя на отдельном экземпляре. Такая архитектура обеспечивает лучшую масштабируемость и гибкость в управлении ресурсами хранения данных и вычислений.
Данная возможность находится в экспериментальной стадии и должна использоваться с осторожностью.
Хранилище 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 в настоящее время является экспериментальным. Основные ограничения данного режима приведены ниже.
- Хотя таблицы и материализованные представления OrioleDB хранятся инкрементально в корзине S3, история сохраняется навсегда. В настоящее время отсутствует механизм безопасного удаления старых данных.
- В конфигурации основной/реплики каждый экземпляр должен использовать отдельную корзину 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