Внутреннее устройство хранилища S3
Поддержка хранилища S3 доступна начиная с MariaDB 10.5.4.
Хранилище S3 основано на коде Aria. Внутренне хранилище S3 наследуется от кода Aria, с добавленными крючками, которые изменяют чтение данных, чтобы вместо чтения с локального диска, данные считывались из S3.
Движок S3 использует свой собственный кэш страниц, модифицированный для обработки чтения блоков из S3 (размером s3_block_size). Внутренне кэш страниц S3 использует страницы размером aria-block-size для разделения блоков, считываемых из S3.
ALTER TABLE
ALTER TABLE сначала создаст локальную таблицу в обычном формате Aria на диске, а затем переместит как индексы, так и данные в S3 в корзинах размером S3_BLOCK_SIZE. Файл .frm также копируется в S3 для обнаружения другими серверами MariaDB. Также можно использовать ALTER TABLE для изменения структуры таблицы S3.
Разбиение таблиц
Начиная с MariaDB 10.5.3, таблицы S3 также могут использоваться с разбиением таблиц. Все операции ALTER PARTITION поддерживаются, за исключением:
- REBUILD PARTITION
- TRUNCATE PARTITION
- REORGANIZE PARTITION
Крупные чтения
Одним из свойств многих реализаций S3 является предпочтительность крупных чтений. Считается, что размер 4М обеспечивает наилучшую производительность, поэтому значение по умолчанию для S3_BLOCK_SIZE составляет 4М.
Сжатие
Если используется сжатие (COMPRESSION_ALGORITHM=zlib), то все блоки индексов и данные блоков сжимаются. Файл .frm и заголовок определения Aria (первая страница/страницы в файле индекса) не сжимаются, так как они используются для обнаружения/открытия.
Если используется сжатие, то размер локального блока S3_BLOCK_SIZE, но размер блока, хранящегося в S3, будет равен размеру сжатого блока.
Средний уровень сжатия, который мы наблюдали, составляет около 80% экономии места.
Структура, хранящаяся в S3
Таблица будет скопирована в S3 в следующих расположениях:
frm file (for discovery): s3_bucket/database/table/frm First index block (contains description of the Aria file): s3_bucket/database/table/aria Rest of the index file: s3_bucket/database/table/index/block_number Data file: s3_bucket/database/table/data/block_number
block_number — шестнадцатизначное десятичное число, с префиксом 0 (Может быть больше 6 цифр, префикс используется для удобства вывода).
Использование инструмента awsctl Python для проверки данных
Установка awsctl на Linux
# install python-pip (on an OpenSuse distribution) # use the appropriate command for your distribution zypper install python-pip pip install --upgrade pip # the following installs awscli tools in ~/.local/bin pip install --upgrade --user awscli export PATH=~/.local/bin:$PATH # configure your aws credentials aws configure
Использование инструмента awsctl
Можно использовать инструмент aws python для просмотра того, как данные хранятся в S3:
shell> aws s3 ls --recursive s3://mariadb-bucket/ 2019-05-10 17:46:48 8192 foo/test1/aria 2019-05-10 17:46:49 3227648 foo/test1/data/000001 2019-05-10 17:46:48 942 foo/test1/frm 2019-05-10 17:46:48 1015808 foo/test1/index/000001
Чтобы удалить устаревшую таблицу foo.test1, можно выполнить:
shell> ~/.local/bin/aws s3 rm --recursive s3://mariadb-bucket/foo/test1 delete: s3://mariadb-bucket/foo/test1/aria delete: s3://mariadb-bucket/foo/test1/data/000001 delete: s3://mariadb-bucket/foo/test1/frm delete: s3://mariadb-bucket/foo/test1/index/000001
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/s3-storage-engine-internals/