Große Objekte speichern

IBM Cloud® Object Storage kann einzelne Objekte mit einer Größe bis zu 10 TB unterstützen, wenn mehrteilige Uploads verwendet werden.

Große Objekte können auch über die Konsole mit aktivierter Aspera-Hochgeschwindigkeitsübertragung hochgeladen werden. In den meisten Szenarios führt der Einsatz der Aspera-Hochgeschwindigkeitsübertragung zu einer deutlich verbesserten Leistung bei der Datenübertragung. Dies gilt insbesondere bei großen Distanzen oder bei instabilen Netzbedingungen.

Objekte in mehreren Teilen hochladen

Operationen für mehrteilige Uploads werden empfohlen, um größere Objekte in Object Storage zu schreiben. Der Upload eines einzelnen Objekts wird als Gruppe einzelner Teile ausgeführt. Diese Teile können unabhängig voneinander in beliebiger Reihenfolge und auch parallel hochgeladen werden. Nach Abschluss des Uploads stellt Object Storage alle Teile als ein einziges Objekt dar. Diese Vorgehensweise hat zahlreiche Vorteile: Es kommt nicht zu Fehlern bei umfangreichen Uploads durch Netzunterbrechungen, die Uploads können angehalten und später neu gestartet werden und die Objekte können zeitnah zur Erstellung hochgeladen werden.

Mehrteilige Uploads sind nur für Objekte mit einer Größe von mehr als 5 MB verfügbar. Bei Objekten, die kleiner als 50 GB sind, wird eine Größe der einzelnen Teile zwischen 20 MB und 100 MB empfohlen, um eine optimale Leistung zu erzielen. Bei größeren Objekten kann die Größe der Teile vergrößert werden, ohne dass hierdurch die Leistung wesentlich beeinträchtigt wird. Mehrteilige Uploads sind auf maximal 10.000 Teile von jeweils 5 GB beschränkt. Die Objektgröße darf maximal 10 TB betragen.

Aufgrund der komplexen Verwaltung und Optimierung paralleler Uploads verwenden Entwickler häufig Bibliotheken, die Unterstützung für mehrteilige Uploads bieten.

Die meisten Tools wie beispielsweise Befehlszeilenschnittstellen oder IBM Cloud Console sowie die meisten kompatiblen Bibliotheken und SDKs übertragen Objekte automatisch mit mehrteiligen Uploads.

REST-API oder SDKs verwenden

Unvollständige mehrteilige Uploads bleiben erhalten, bis das Objekt gelöscht wird oder bis der mehrteilige Upload abgebrochen wird. Wird ein unvollständiger mehrteiliger Upload nicht abgebrochen, belegt der nur teilweise durchgeführte Upload weiterhin Ressourcen. Schnittstellen sollten unter Berücksichtigung dieses Aspekts entworfen werden, sodass unvollständige mehrteilige Uploads bereinigt werden.

Der Upload eines Objekts in mehreren Teilen umfasst drei Phasen:

  1. Der Upload wird gestartet und das System erstellt eine UploadId.
  2. Einzelne Teile werden unter Angabe ihrer sequenziellen Teilenummer und der UploadId des Objekts hochgeladen.
  3. Nachdem alle Teile hochgeladen wurden, wird der Upload abgeschlossen, indem eine Anforderung mit der UploadId und einem XML-Block gesendet wird, der eine Auflistung aller Teilenummern und des entsprechenden Werts für Etag enthält.

Weitere Informationen zu Endpunkten finden Sie in Endpunkte und Speicherpositionen.

Mehrteiligen Upload starten

Eine POST-Anforderung, die für ein Objekt mit dem Abfrageparameter upload abgesetzt wird, erstellt einen neuen Wert für UploadId, auf den dann von jedem Teil des hochzuladenden Objekts verwiesen wird.

Syntax

POST https://{endpoint}/{bucket-name}/{object-name}?uploads= # path style
POST https://{bucket-name}.{endpoint}/{object-name}?uploads= # virtual host style

Beispielanforderung

POST /some-bucket/multipart-object-123?uploads= HTTP/1.1
Authorization: Bearer {token}
Host: s3.us.cloud-object-storage.appdomain.cloud

Beispielantwort

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>

Teil hochladen

Eine PUT-Anforderung, die für ein Objekt mit den Abfrageparametern partNumber und uploadId abgesetzt wird, dient zum Hochladen eines Teils eines Objekts. Die Teile können nacheinander oder parallel hochgeladen werden, müssen jedoch in der richtigen Reihenfolge nummeriert sein.

Syntax

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

Beispielanforderung

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

Beispielantwort

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

Mehrteiligen Upload ausführen

Eine POST-Anforderung, die für ein Objekt mit dem Abfrageparameter uploadId und dem entsprechenden XML-Block im Hauptteil abgesetzt wird, dient zur Ausführung eines mehrteiligen Uploads.

Syntax

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>

Beispielanforderung

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>

Beispielantwort

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>

Unvollständige mehrteilige Uploads abbrechen

Eine DELETE-Anforderung, die für ein Objekt mit dem Abfrageparameter uploadId abgesetzt wird, dient zur Löschung aller nicht abgeschlossenen Teile eines mehrteiligen Uploads.

Syntax

DELETE https://{endpoint}/{bucket-name}/{object-name}?uploadId={uploadId}= # path style
DELETE https://{bucket-name}.{endpoint}/{object-name}?uploadId={uploadId}= # virtual host style

Beispielanforderung

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

Beispielantwort

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

S3cmd (CLI) verwenden

S3cmd ist ein kostenloses Befehlszeilentool und Client für Linux und Mac zum Hochladen, Abrufen und Verwalten von Daten in Cloud-Speicher-Service-Providern, die das Protokoll S3 verwenden. Das Tool wurde für professionelle Anwender konzipiert, die mit Befehlszeilenprogrammen vertraut sind. Es eignet sich ideal für Stapelscripts und automatisierte Sicherungen. S3cmd ist in Python geschrieben. Es stellt ein Open-Source-Projekt dar, das unter GNU Public License v2 (GPLv2) bereitgestellt wird und sowohl für kommerzielle als auch private Nutzer kostenlos zur Verfügung gestellt wird.

S3cmd erfordert Python 2.6 oder höher und ist mit Python 3 kompatibel. Am einfachsten lässt sich S3cmd mit dem Python-Paketindex (PyPi) installieren.

pip install s3cmd

Nachdem das Paket installiert wurde, greifen Sie die IBM Cloud® Object Storage-Beispielkonfigurationsdatei hier und aktualisieren Sie sie mit Ihren Cloud Object Storage-Berechtigungsnachweisen (S3):

$ wget -O $HOME/.s3cfg https://gist.githubusercontent.com/greyhoundforty/676814921b8f4367fba7604e622d10f3/raw/422abaeb70f1c17cd5308745c0e446b047c123e0/s3cfg

Die folgenden vier Zeilen müssen aktualisiert werden:

  • access_key
  • secret_key
  • host_base
  • host_bucket {: S3cmd} Dies trifft unabhängig davon zu, ob Sie die Beispieldatei oder die Datei verwenden, die durch Ausführung des folgenden Befehls generiert werden kann: s3cmd --configure.

Sobald diese Zeilen mit den COS-Details über das Kundenportal aktualisiert wurden, können Sie die Verbindung testen, indem Sie den Befehl s3cmd ls absetzen, mit dem alle Buckets eines Kontos aufgelistet werden können.

$ 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

Die vollständige Liste der Optionen und Befehle sowie grundlegende Nutzungsinformationen finden Sie auf der Site s3tools.

Mehrteilige Uploads mit S3cmd

Der Befehl put führt automatisch einen mehrteiligen Upload aus, wenn versucht wird, Dateien hochzuladen, deren Größe den angegebenen Schwellenwert übersteigt.

s3cmd put FILE [FILE...] s3://BUCKET[/PREFIX]

Der Schwellenwert wird anhand der Option --multipart-chunk-size-mb ermittelt:

--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.

Beispiel:

s3cmd put bigfile.pdf s3://backuptest/bigfile.pdf --multipart-chunk-size-mb=5

Ausgabe:

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

Java-SDK verwenden

Mit dem Java-SDK stehen Ihnen zwei Möglichkeiten zum Hochladen großer Objekte zur Verfügung:

Python-SDK verwenden

Mit dem Python-SDK stehen Ihnen zwei Möglichkeiten zum Hochladen großer Objekte zur Verfügung:

Node.js-SDK verwenden

Mit dem Node.js-SDK steht Ihnen eine Möglichkeit zum Hochladen großer Objekte zur Verfügung: