Armazenando objetos grandes
O IBM Cloud® Object Storage pode suportar objetos únicos tão grandes quanto 10 TB ao usar uploads de múltiplas partes.
Os objetos grandes também podem ser transferidos por upload usando o console com o Aspera high-speed transfer ativado. Na maioria dos cenários, o Aspera high-speed transfer resulta em um desempenho significativamente maior para transferir dados, especialmente em longas distâncias ou sob condições de rede instável.
Fazendo upload de objetos em múltiplas partes
As operações de upload de múltiplas partes são recomendadas para gravar objetos maiores no Object Storage. Um upload de um único objeto é executado como um conjunto de partes e essas partes podem ser transferidas por upload independentemente em qualquer ordem e em paralelo. Após a conclusão do upload, o Object Storage então apresenta todas as partes como um único objeto. Isso fornece muitos benefícios: as interrupções de rede não fazem com que grandes uploads falhem, os uploads podem ser pausados e reiniciados ao longo do tempo e os objetos podem ser transferidos por upload conforme eles estão sendo criados.
Os uploads de múltiplas partes estão disponíveis somente para objetos maiores que 5 MB. Para objetos menores que 50 GB, um tamanho de parte de 20 MB a 100 MB é recomendado para desempenho ideal. Para objetos maiores, o tamanho da parte pode ser aumentado sem impacto significativo no desempenho. Os uploads de múltiplas partes são limitados a não mais que 10.000 partes de 5 GB cada até um tamanho máximo de objeto de 10 TB.
Devido à complexidade envolvida no gerenciamento e otimização de uploads feitos em paralelo, muitos desenvolvedores usam bibliotecas que fornecem suporte de upload de múltiplas partes.
A maioria das ferramentas, como as CLIs ou o IBM Cloud Console, assim como as bibliotecas e os SDKs mais compatíveis, transferirá automaticamente os objetos em uploads de múltiplas partes.
Usando a API de REST ou os SDKs
Os uploads de múltiplas partes incompletos persistem até que o objeto seja excluído ou que o upload de múltiplas partes seja interrompido. Se um upload de múltiplas partes incompleto não for interrompido, o upload parcial continuará a usar recursos. As interfaces devem ser projetadas tendo esse ponto em mente e limpar os uploads de múltiplas partes incompletos.
Há três fases para fazer upload de um objeto em múltiplas partes:
- O upload é iniciado e um
UploadIdé criado. - As partes individuais são transferidas por upload especificando seus números de partes sequenciais e o
UploadIdpara o objeto. - Quando todas as partes concluem o upload, o upload é concluído enviando uma solicitação com o
UploadIde um bloco XML que lista cada número de parte e seu respectivo valorEtag.
Para obter mais informações sobre terminais, consulte Terminais e locais de armazenamento
Iniciar um upload de múltiplas partes
Um POST emitido para um objeto com o parâmetro de consulta upload cria um novo valor UploadId, que é, então, referenciado por cada parte do objeto que está sendo transferido por upload.
Sintaxe
POST https://{endpoint}/{bucket-name}/{object-name}?uploads= # path style
POST https://{bucket-name}.{endpoint}/{object-name}?uploads= # virtual host style
Exemplo de solicitação
POST /some-bucket/multipart-object-123?uploads= HTTP/1.1
Authorization: Bearer {token}
Host: s3.us.cloud-object-storage.appdomain.cloud
Exemplo de resposta
HTTP/1.1 200 OK
Date: Fri, 03 Mar 2017 20:34:12 GMT
X-Clv-Request-Id: 258fdd5a-f9be-40f0-990f-5f4225e0c8e5
Accept-Ranges: bytes
Server: Cleversafe/3.9.1.114
X-Clv-S3-Version: 2.5
Content-Type: application/xml
Content-Length: 276
<InitiateMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Bucket>some-bucket</Bucket>
<Key>multipart-object-123</Key>
<UploadId>0000015a-95e1-4326-654e-a1b57887784f</UploadId>
</InitiateMultipartUploadResult>
Fazer upload de uma parte
Uma solicitação PUT que é emitida para um objeto com parâmetros de consulta partNumber e uploadId fará upload de uma parte de um objeto. As partes podem ser transferidas por upload em série ou em paralelo,
mas devem ser numeradas em ordem.
Sintaxe
PUT https://{endpoint}/{bucket-name}/{object-name}?partNumber={sequential-integer}&uploadId={uploadId}= # path style
PUT https://{bucket-name}.{endpoint}/{object-name}?partNumber={sequential-integer}&uploadId={uploadId}= # virtual host style
Exemplo de solicitação
PUT /some-bucket/multipart-object-123?partNumber=1&uploadId=0000015a-df89-51d0-2790-dee1ac994053 HTTP/1.1
Authorization: Bearer {token}
Content-Type: application/pdf
Host: s3.us.cloud-object-storage.appdomain.cloud
Content-Length: 13374550
Exemplo de resposta
HTTP/1.1 200 OK
Date: Sat, 18 Mar 2017 03:56:41 GMT
X-Clv-Request-Id: 17ba921d-1c27-4f31-8396-2e6588be5c6d
Accept-Ranges: bytes
Server: Cleversafe/3.9.1.114
X-Clv-S3-Version: 2.5
ETag: "7417ca8d45a71b692168f0419c17fe2f"
Content-Length: 0
Concluir um upload de múltiplas partes
Uma solicitação POST que é emitida para um objeto com o parâmetro de consulta uploadId e o bloco XML apropriado no corpo concluirá um upload de múltiplas partes.
Sintaxe
POST https://{endpoint}/{bucket-name}/{object-name}?uploadId={uploadId}= # path style
POST https://{bucket-name}.{endpoint}/{object-name}?uploadId={uploadId}= # virtual host style
<CompleteMultipartUpload>
<Part>
<PartNumber>{sequential part number}</PartNumber>
<ETag>{ETag value from part upload response header}</ETag>
</Part>
</CompleteMultipartUpload>
Exemplo de solicitação
POST /some-bucket/multipart-object-123?uploadId=0000015a-df89-51d0-2790-dee1ac994053 HTTP/1.1
Authorization: Bearer {token}
Content-Type: text/plain; charset=utf-8
Host: s3.us.cloud-object-storage.appdomain.cloud
Content-Length: 257
<CompleteMultipartUpload>
<Part>
<PartNumber>1</PartNumber>
<ETag>"7417ca8d45a71b692168f0419c17fe2f"</ETag>
</Part>
<Part>
<PartNumber>2</PartNumber>
<ETag>"7417ca8d45a71b692168f0419c17fe2f"</ETag>
</Part>
</CompleteMultipartUpload>
Exemplo de resposta
HTTP/1.1 200 OK
Date: Fri, 03 Mar 2017 19:18:44 GMT
X-Clv-Request-Id: c8be10e7-94c4-4c03-9960-6f242b42424d
Accept-Ranges: bytes
Server: Cleversafe/3.9.1.114
X-Clv-S3-Version: 2.5
ETag: "765ba3df36cf24e49f67fc6f689dfc6e-2"
Content-Type: application/xml
Content-Length: 364
<CompleteMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Location>http://s3.us.cloud-object-storage.appdomain.cloud/zopse/multipart-object-123</Location>
<Bucket>some-bucket</Bucket>
<Key>multipart-object-123</Key>
<ETag>"765ba3df36cf24e49f67fc6f689dfc6e-2"</ETag>
</CompleteMultipartUploadResult>
Interromper uploads de múltiplas partes incompletos
Uma solicitação DELETE emitida para um objeto com o parâmetro de consulta uploadId exclui todas as partes não concluídas de um upload de múltiplas partes.
Sintaxe
DELETE https://{endpoint}/{bucket-name}/{object-name}?uploadId={uploadId}= # path style
DELETE https://{bucket-name}.{endpoint}/{object-name}?uploadId={uploadId}= # virtual host style
Exemplo de solicitação
DELETE /some-bucket/multipart-object-123?uploadId=0000015a-df89-51d0-2790-dee1ac994053 HTTP/1.1
Authorization: Bearer {token}
Host: s3.us.cloud-object-storage.appdomain.cloud
Exemplo de resposta
HTTP/1.1 204 No Content
Date: Thu, 16 Mar 2017 22:07:48 GMT
X-Clv-Request-Id: 06d67542-6a3f-4616-be25-fc4dbdf242ad
Accept-Ranges: bytes
Server: Cleversafe/3.9.1.114
X-Clv-S3-Version: 2.5
Usando o S3cmd (CLI)
S3cmd é uma ferramenta de linha de comandos e cliente livres do Linux e Mac para fazer upload, recuperar e gerenciar dados em provedores de serviço de armazenamento em nuvem que usam o protocolo S3. Ele é projetado para usuários avançados que estão familiarizados com os programas de linha de comandos e são ideais para scripts em lote e backup automatizado. O S3cmd é gravado em Python. É um projeto de software livre disponível sob o GNU Public License v2 (GPLv2) e é grátis para uso comercial e privado.
S3cmd requer Python 2.6 ou mais recente e é compatível com Python 3. A maneira mais fácil de instalar o S3cmd é com o Python Package Index (PyPi).
pip install s3cmd
Depois que o pacote tiver sido instalado, capture o arquivo de configuração de exemplo do IBM Cloud® Object Storage aqui e atualize-o com suas credenciais do Cloud Object Storage (S3):
$ wget -O $HOME/.s3cfg https://gist.githubusercontent.com/greyhoundforty/676814921b8f4367fba7604e622d10f3/raw/422abaeb70f1c17cd5308745c0e446b047c123e0/s3cfg
As quatro linhas que precisam ser atualizadas são
access_keysecret_keyhost_basehost_bucket{: S3cmd} Isso é o mesmo se você usar o arquivo de exemplo ou aquele gerado executando:s3cmd --configure.
Assim que essas linhas tiverem sido atualizadas com os detalhes do COS do portal do Cliente, será possível testar a conexão emitindo o comando s3cmd ls, que listará todos os depósitos na conta.
$ s3cmd ls
2017-02-03 14:52 s3://backuptest
2017-02-06 15:04 s3://coldbackups
2017-02-03 21:23 s3://largebackup
2017-02-07 17:44 s3://winbackup
A lista completa de opções e comandos juntamente com as informações básicas de uso estão disponíveis no site s3tools.
Uploads de múltiplas partes com S3cmd
Um comando put executará automaticamente um upload de múltiplas partes ao tentar fazer upload de um arquivo maior que o limite especificado.
s3cmd put FILE [FILE...] s3://BUCKET[/PREFIX]
O limite é determinado pela opção --multipart-chunk-size-mb:
--multipart-chunk-size-mb=SIZE
Size of each chunk of a multipart upload. Files bigger
than SIZE are automatically uploaded as multithreaded-
multipart, smaller files are uploaded using the
traditional method. SIZE is in megabytes, default
chunk size is 15MB, minimum allowed chunk size is 5MB,
maximum is 5GB.
Exemplo:
s3cmd put bigfile.pdf s3://backuptest/bigfile.pdf --multipart-chunk-size-mb=5
Saída:
upload: 'bigfile.pdf' -> 's3://backuptest/bigfile.pdf' [part 1 of 4, 5MB] [1 of 1]
5242880 of 5242880 100% in 2s 1731.92 kB/s done
upload: 'bigfile.pdf' -> 's3://backuptest/bigfile.pdf' [part 2 of 4, 5MB] [1 of 1]
5242880 of 5242880 100% in 2s 2001.14 kB/s done
upload: 'bigfile.pdf' -> 's3://backuptest/bigfile.pdf' [part 3 of 4, 5MB] [1 of 1]
5242880 of 5242880 100% in 2s 2000.28 kB/s done
upload: 'bigfile.pdf' -> 's3://backuptest/bigfile.pdf' [part 4 of 4, 4MB] [1 of 1]
4973645 of 4973645 100% in 2s 1823.51 kB/s done
Usando o SDK Java
O SDK Java fornece duas maneiras de executar uploads de objetos grandes:
Usando o SDK Python
O SDK Python fornece duas maneiras de executar uploads de objetos grandes:
Usando o SDK Node.js
O SDK Node.js fornece uma única maneira de executar uploads de objetos grandes: