Objetivos de aprendizado
Depois de ler este artigo, você vai conseguir:
- Entender como blocos, arquivos e objetos organizam os dados
- Comparar latência, escala, acesso e uso típico de cada tipo
- Escolher o tipo certo para banco, arquivos de usuário ou mídia
Quando alguém diz "preciso de storage", pode estar falando de três coisas bem diferentes. Um banco de dados quer um disco rápido. Um time quer uma pasta compartilhada. Um site quer servir milhares de imagens. Cada necessidade pede um modelo próprio, e escolher o errado sai caro em desempenho ou em complexidade.
Os três modelos são block storage (blocos), file storage (arquivos) e object storage (objetos). A diferença está em quem organiza os dados e em como você os acessa.
Como cada tipo de armazenamento guarda os dados?#
Blocos. Os dados são divididos em blocos de tamanho fixo, cada um com um endereço. Você lê e escreve blocos individuais diretamente. O resultado é um dispositivo bruto, sem pastas: o sistema operacional o formata com um sistema de arquivos (ext4, XFS, NTFS) e o usa como um disco. A documentação do Amazon EBS descreve exatamente isso: um dispositivo de bloco que você anexa a uma instância e usa como um disco rígido físico.
Arquivos. Os dados ficam numa hierarquia de pastas e arquivos, com nomes, caminhos e permissões de usuário e grupo. A diferença para o bloco é que o sistema de arquivos já vem pronto e pode ser compartilhado: vários servidores montam a mesma pasta pela rede, normalmente por NFS ou SMB. O Amazon EFS, por exemplo, usa NFS 4 e permissões POSIX.
Objetos. Cada arquivo vira um objeto: o conteúdo, uma chave única e metadados. Os objetos ficam num espaço plano (um bucket) e são acessados por uma API HTTP, com operações como PUT, GET e DELETE. Não há disco montado nem pasta de verdade. Os detalhes estão em o que é armazenamento de objetos.
Qual a diferença na prática?#
O mesmo arquivo, duas formas de acessar:
import os
import boto3
def editar_em_disco():
# Bloco ou arquivo: o sistema operacional entrega um caminho montado.
# Você abre o arquivo e escreve no meio dele.
with open("/dados/relatorio.csv", "r+b") as f:
f.seek(1024)
f.write(b"novo conteudo") # altera só esses bytes
def enviar_como_objeto():
# Objeto: não há caminho montado, só chave e API HTTP.
# Para mudar um byte, você envia o objeto inteiro de novo.
s3 = boto3.client(
"s3",
endpoint_url=os.environ["S3_ENDPOINT"],
aws_access_key_id=os.environ["S3_ACCESS_KEY"],
aws_secret_access_key=os.environ["S3_SECRET_KEY"],
)
with open("relatorio.csv", "rb") as f:
s3.put_object(Bucket="meu-bucket", Key="relatorios/relatorio.csv", Body=f)No primeiro caso, o programa usa chamadas de sistema de arquivos e altera bytes no lugar. No segundo, cada operação é uma requisição de rede que lê ou troca o objeto inteiro. Por isso um programa escrito para disco não funciona em object storage sem adaptação, e o contrário também vale.
Tabela comparativa#
| Característica | Blocos | Arquivos | Objetos |
|---|---|---|---|
| Unidade | Bloco de tamanho fixo | Arquivo em pasta | Objeto com chave e metadados |
| Organização | Disco bruto, sem estrutura | Hierarquia de pastas | Espaço plano em buckets |
| Acesso | Anexado a um servidor | Montado pela rede (NFS, SMB) | API HTTP (REST, compatível com S3) |
| Escrita parcial | Sim | Sim | Em geral não: o objeto é substituído inteiro |
| Latência | Mais baixa | Baixa a média | Mais alta por requisição |
| Escala | Limitada ao volume | Alta (o Amazon EFS chega a petabytes) | Petabytes e bilhões de objetos |
| Compartilhamento | Em geral um servidor por vez | Vários servidores ao mesmo tempo | Qualquer cliente com credencial ou URL |
| Uso típico | Bancos, sistema operacional, máquinas virtuais | Pastas de equipe, conteúdo compartilhado | Imagens, vídeos, exportações, arquivos estáticos |
A AWS descreve o block storage como de baixa latência, o file storage como o mais indicado para acesso compartilhado e o object storage como de escala quase ilimitada, com mais latência no acesso. Os números variam por provedor e por tipo de volume, então confira a documentação do serviço que for usar.
Quando escolher cada um?#
Escolha blocos quando uma aplicação precisa de disco rápido e dedicado: bancos de dados, sistemas com muitas leituras e escritas pequenas e o disco do sistema operacional. Em geral o volume é anexado a um servidor por vez, com exceções em alguns provedores, como o Multi-Attach do EBS.
Escolha arquivos quando vários servidores precisam enxergar a mesma árvore de pastas ao mesmo tempo, com permissões e semântica de sistema de arquivos. Exemplos: um diretório de uploads compartilhado entre réplicas de uma aplicação legada ou um repositório de mídia editado por uma equipe.
Escolha objetos quando você guarda muitos arquivos enviados e baixados inteiros: avatares, imagens de produto, vídeos, PDFs, logs arquivados, exportações. É o melhor ponto de partida para conteúdo que cresce sem limite definido e precisa ser servido pela internet. Para decidir onde colocar imagens, veja imagens no banco de dados ou em object storage.
Combine os três. Aplicações reais misturam tipos: o banco roda em disco de blocos, e as imagens enviadas pelos usuários vão para object storage, com apenas a chave guardada no banco. Não existe vencedor universal, só o tipo certo para cada dado.
Object storage substitui o disco da aplicação?#
Não para tudo. Se o seu código abre arquivos por caminho e escreve no meio deles, ele precisa de disco ou de um sistema de arquivos. Mas se o disco do servidor serve só para guardar uploads, trocá-lo por object storage resolve três problemas de uma vez: o espaço deixa de acabar, os arquivos sobrevivem à recriação do servidor e várias instâncias passam a ver os mesmos dados.
Como a API do Amazon S3 virou padrão de fato, muitos provedores oferecem storage compatível. Isso permite trocar de provedor mudando, em geral, o endpoint e as credenciais. Veja o que é storage compatível com S3.
Como fazer isso na Square Cloud#
Para o caso de objetos, a Square Cloud oferece o Blob Storage: object storage com API compatível com S3 (aws-cli, rclone, boto3 e os SDKs da AWS), além de API REST e painel. A função enviar_como_objeto do exemplo acima serve de base: defina S3_ENDPOINT como https://s3-blob.squarecloud.app e preencha S3_ACCESS_KEY e S3_SECRET_KEY com as chaves da aba "Acesso S3" do painel.
Os arquivos podem ter até 10 GB, e o multipart só é obrigatório acima de 100 MB. Não há taxa de saída nem de entrada, e todo plano inclui uma cota de 5 GB a 250 GB. Arquivos públicos são servidos por uma CDN global na edge, e arquivos privados abrem por link temporário ou link de compartilhamento. Você também define regras por pasta, como expiração, cache e extensões permitidas.
Conheça o serviço em Blob Storage.
Blob Storage
Object storage compatível com S3, sem taxa de saída
Perguntas frequentes
Qual a diferença entre block storage e file storage?
O block storage é um disco bruto: o sistema operacional o formata e cuida do sistema de arquivos. O file storage já entrega um sistema de arquivos pronto, com pastas e permissões, que vários servidores montam pela rede.
Object storage substitui um disco?
Não. Em geral, um objeto é gravado e substituído inteiro e é acessado por HTTP, sem ser montado como pasta. Ele serve para arquivos que você envia e baixa, como imagens, vídeos e exportações, não para bancos de dados.
Qual tipo de storage um banco de dados usa?
Bancos de dados usam block storage, ou um disco local, porque fazem muitas leituras e escritas pequenas e parciais que exigem baixa latência. Object storage, em geral, não permite escrita parcial e tem latência maior por requisição.
O Amazon S3 é block, file ou object storage?
O Amazon S3 é object storage. Ele guarda objetos em buckets e os expõe por API HTTP. Na AWS, o equivalente para block storage é o EBS, e para file storage é o EFS.
Mais em Storage
Ver todos os 15 artigos- O que é uma URL assinada (pre-signed URL) e quando usarUma URL assinada (pre-signed URL) é um link temporário para um arquivo privado. Veja como funciona, o que ela não faz e quando usar.
- O que é armazenamento de objetos (object storage)Armazenamento de objetos guarda arquivos como objetos com chave e metadados, acessados por API HTTP. Veja como funciona, para que serve e seus limites.
- O que é S3 e armazenamento compatível com S3S3 é o armazenamento de objetos da Amazon e virou a API padrão do setor. Veja o que significa ser compatível com S3, o que muda e como conectar via boto3.
- Upload de arquivos grandes: multipart e upload retomávelO upload multipart divide um arquivo grande em partes enviadas em paralelo e reenviadas uma a uma. Veja o passo a passo em Python, como retomar e os erros comuns.