Tenho um banco de dados mariadb configurado para registrar dados de experimentos. Em uma das tabelas, armazeno imagens brutas enormes em cada linha. Com alguns milhões de linhas, cada uma contendo 3 imagens de 512*512px, fico sem espaço em disco. Tenho 12 TB de disco e o banco de dados consumiu ~10 TB. A diferença entre as imagens é pequena, então acredito que há muito espaço para compactação. Quero considerar a compactação do banco de dados, mas com espaço livre limitado, quero um método para compactá-lo no lugar. Uso o mariadb 10.3.39 no Ubuntu 20.04. Não sou especialista em banco de dados, mas ficarei feliz em aprender mais. Eu tentei:
ALTER TABLE images ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8 ALGORITHM=INPLACE;
e eu obtive:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ALGORITHM=INPLACE' at line 1
Também considerei que talvez eu possa particionar minha tabela em pedaços e compactar cada partição individualmente. No entanto, também não tenho certeza se particionar uma tabela existente requer mais espaço. Gostaria de obter alguma recomendação antes de tentar às cegas.
Resposta curta: Não
Resposta longa:
INPLACE
não vai funcionar.PARTITION
seus 10 GB seriam necessários 10 GB extras (que você não tem).PARTITION
; isso elimina seu benefício hipotético de particionamento.Aqui vai uma ideia...
PRIMARY KEY
. Leia o(s) blob(s), compacte-os e armazene-os de volta na tabela. Isso levará muito tempo e, aparentemente, não economizará espaço em disco. (Mais sobre isso depois.)INSERTs
. Advertência: A coluna BLOB provavelmente está armazenada "off-record"; não sei se os blocos liberados podem ser reutilizados. Então, recomendo executar alguns testes.Ou...
Se você consegue conviver com linhas "antigas" sendo excluídas, veja aqui como fazer isso com o mínimo de impacto: https://mysql.rjweb.org/doc.php/deletebig
Basicamente, uma boa imagem compactada, mesmo que seja impecável, será melhor do que uma linha compactada.
mas como MARIAFB não suporta compressão em um ALTER TABLE
O que você pode fazer é
violino