Untuk mengetahui apakah sistem Storage Object Anda mendukung fitur ini, lihat :ref: discoverability atau hubungi penyedia layanan Anda.
Secara default, isi dari sebuah objek tidak dapat lebih besar dari 5 GB. Namun, Anda dapat menggunakan sejumlah objek yang lebih kecil untuk membangun sebuah objek besar. Objek besar terdiri dari dua jenis object:
`` Segmen objects`` menyimpan konten objek. Anda dapat membagi konten Anda ke dalam segmen dan meng-upload setiap segmen ke objek segmen sendiri. Object segmen tidak memiliki fitur spesial. Anda membuat, memperbarui, download, dan menghapus objek segmen seperti yang Anda lakukan dengan object yang normal.
Sebuah manifest object
menghubungkan object segmen menjadi satu objek besar logis. Ketika Anda men-download sebuah objek nyata (manifest) , Object Storage concatenate (merangkai) dan mengembalikan isi dari object segmen dalam response body. Perilaku ini meluas ke header respon dikembalikan oleh permintaan (request) `` GET`` dan HEAD
. Respon header Content-Length
berisi ukuran total semua object segmen.
Object Storage mengambil nilai ETag
dari setiap segmen, merangkai mereka bersama-sama, dan mengembalikan checksum MD5 hasilnya untuk menghitung nilai respon header (response header value) ETag
. Jenis objek nyata (manifest) adalah:
Isi objek manifest adalah sebuah ordered list nama object segmen dalam format JSON. Lihat :ref: static_large_objects.
Objek manifest tidak memiliki konten tetapi memiliki metadata header X-Object-Manifest
. Nilai dari header ini adalah CONTAINER/PREFIX
, dimana CONTAINER
adalah nama dari kontainer dimana objek segmen disimpan, dan PREFIX
adalah string bahwa semua object segmen memiliki kesamaan. Lihat :ref: dynamic_large_objects.
Catatan
Jika Anda menggunakan objek bermanifestasi sebagai sumber dari permintaan COPY
, objek baru adalah objek normal, dan tidak segmen,. Jika ukuran total sumber objek segmen melebihi 5 GB, permintaan COPY
gagal. Namun, Anda dapat membuat duplikat dari objek nyata dan objek baru ini bisa lebih besar dari 5 GB.
Untuk membuat sebuah objek besar statis, bagilah konten Anda menjadi potongan-potongan dan menciptakan (upload) objek segmen mengandung masing-masing bagian.
Anda harus mencatat nilai header respon ETag
dimana pengembalian operation PUT
. Atau, Anda dapat menghitung checksum MD5 dari segmen sebelum Anda melakukan upload dan termasuk nilai ini dalam header permintaan ETag
. Tindakan ini memastikan bahwa upload tidak dapat merusak data Anda.
Daftar nama masing-masing objek segmen bersama dengan ukuran dan MD5 checksum secara teratur.
Buat objek nyata (manifest). Sertakan query string ?multipart-manifest=put
pada akhir nama objek nyata untuk menunjukkan bahwa ini adalah objek nyata.
Body permintaan (request) PUT
pada objek nyata terdiri dari daftar JSON dimana setiap elemen mengandung atribut ini:
CONTAINER_NAME/OBJECT_NAME
.ETag
dari objek itu.Content-Length
dari objek itu.Contoh ini menunjukkan tiga objek segmen. Anda dapat menggunakan beberapa kontainer dan nama objek tidak harus sesuai dengan pola tertentu, berbeda dengan object besar yang dinamis.
[
{
"path": "mycontainer/objseg1",
"etag": "0228c7926b8b642dfb29554cd1f00963",
"size_bytes": 1468006
},
{
"path": "mycontainer/pseudodir/seg-obj2",
"etag": "5bfc9ea51a00b790717eeb934fb77b9b",
"size_bytes": 1572864
},
{
"path": "other-container/seg-final",
"etag": "b9c3da507d2557c1ddc51f27c54bae51",
"size_bytes": 256
}
]
The Content-Length
request header must contain the length of the
JSON content and not the length of the segment objects. However, after the
PUT
operation completes, the Content-Length
metadata is set to
the total length of all the object segments. A similar situation applies
to the ETag
. If used in the PUT
operation, it must contain the
MD5 checksum of the JSON content. The ETag
metadata value is then
set to be the MD5 checksum of the concatenated ETag
values of the
object segments. You can also set the Content-Type
request header
and custom object metadata.
Ketika operasi PUT
melihat parameter query ?multipart-manifest = put
, itu membaca request body dan memverifikasi bahwa setiap objek segmen ada, dan bahwa ukuran dan ETag cocok. Jika ada ketidakcocokan, operasi PUT
gagal.
Jika semuanya cocok, API membuat objek nyata (manifest) dan menetapkan metadata X-Static-besar-Object
untuk true
untuk menunjukkan bahwa manifes adalah objek nyata statis.
Biasanya, bila Anda melakukan operasi GET
pada objek nyata (manifest), response body berisi konten bersambung objek segmen. Untuk men-download daftar manifest, gunakan parameter query multipart-manifest = get
. Daftar dalam respon tidak diformat sama dengan manifest yang awalnya Anda gunakan dalam operasi PUT
.
Jika Anda menggunakan operasi DELETE
pada objek nyata (manifest) , objek nyata dihapus. Object segmen tidak terpengaruh. Namun, jika Anda menambahkan parameter query ?multipart-manifest = delete
, obyek segmen akan dihapus dan jika semua berhasil dihapus, objek nyata juga dihapus.
Untuk mengubah manifes, menggunakan operasi PUT
dengan parameter query ?multi-bagian-manifest = put
. Permintaan ini membuat objek nyata (manifest). Anda juga dapat memperbarui metadata objek dengan cara yang biasa.
Sebelum Anda dapat meng-upload object yang lebih besar dari 5 GB, Anda harus memotong mereka. Anda meng-upload object segmen seperti yang Anda lakukan dengan object lain dan menciptakan dinamika objek nyata (manifest) besar. Objek manifest memberitahu Object Storage bagaimana menemukan object segmen yang terdiri dari objek besar. Anda masih dapat mengakses setiap segmen individual, tetapi ketika Anda mengambil objek nyata, API merangkai segmen. Anda dapat menyertakan sejumlah segmen dalam sebuah objek tunggal yang besar.
Untuk memastikan download bekerja dengan benar, Anda harus meng-upload semua segmen objek ke kontainer yang sama dan awalan (prefix) setiap nama objek sehingga segmen semacam agar rangkaian yang benar.
Anda juga membuat dan mengunggah file manifest. File manifest file nol-byte dengan tambahan header X-Object-Manifest
CONTAINER/PREFIX
. CONTAINER
adalah kontainer dimana segmen objek berada di dalamnya, dan `` PREFIX`` adalah awalan umum untuk semua segmen. Anda harus utf-8-encode dan kemudian URL-encode kontainer dan awalan umum di header X-Object-Manifest
.
Cara terbaik adalah untuk meng-upload semua segmen pertama dan kemudian membuat atau memperbarui manifes. Dengan metode ini, objek penuh tidak tersedia untuk di-download sampai upload selesai. Juga, Anda dapat meng-upload satu set segmen baru ke lokasi kedua dan memperbarui manifes untuk menunjuk ke lokasi baru ini. Selama upload segmen baru, manifes asli masih tersedia untuk men-download set segmen pertama.
PUT /API_VERSION/ACCOUNT/CONTAINER/OBJECT HTTP/1.1
Host: storage.example.com
X-Auth-Token: eaaafd18-0fed-4b3a-81b4-663c99ec1cbb
ETag: 8a964ee2a5e88be344f36c22562a6486
Content-Length: 1
X-Object-Meta-PIN: 1234
Tidak ada response body dikembalikan (returned).
Kode respon 2``nn`` menunjukkan write (menulis) sukses. nn
adalah nilai 00-99.
Kode respon Length Required (411)
menunjukkan bahwa permintaan tidak termasuk yang diperlukan header Content-Length
atau Content-Type
.
Kode respon Unprocessable Entity (422)
menunjukkan bahwa checksum MD5 dari data ditulis ke sistem penyimpanan TIDAK cocok dengan nilai ETag opsional.
Anda dapat terus meng-upload segmen, seperti yang ditunjukkan contoh ini, sebelum Anda meng-upload manifes.
PUT /API_VERSION/ACCOUNT/CONTAINER/OBJECT HTTP/1.1
Host: storage.example.com
X-Auth-Token: eaaafd18-0fed-4b3a-81b4-663c99ec1cbb
ETag: 8a964ee2a5e88be344f36c22562a6486
Content-Length: 1
X-Object-Meta-PIN: 1234
Berikutnya, upload manifest. Manifest ini menentukan Kontainer dimana segmen objek berada. Catatan bahwa jika Anda meng-upload segmen tambahan setelah Anda membuat manifes, objek bersambung (concatenated) menjadi yang jauh lebih besar tetapi Anda tidak perlu menciptakan file manifest untuk segmen tambahan berikutnya.
PUT /API_VERSION/ACCOUNT/CONTAINER/OBJECT HTTP/1.1
Host: storage.clouddrive.com
X-Auth-Token: eaaafd18-0fed-4b3a-81b4-663c99ec1cbb
Content-Length: 0
X-Object-Meta-PIN: 1234
X-Object-Manifest: CONTAINER/PREFIX
[...]
Sebuah permintaan (request) GET
atau HEAD
di manifes mengembalikan nilai header respon Content-Type
yang sama dengan nilai header request Content-Type
di request PUT` `yang membuat manifes. Untuk mengubah ``Content Type
, terbitkan kembali request PUT
.
Anda dapat menggunakan header permintaan (request) X-Trans-Id-Extra
untuk memasukkan informasi tambahan untuk membantu Anda debug kesalahan yang mungkin terjadi dengan meng-upload objek besar dan transaksi Object Storage lainnya.
Objek Storage API menambahkan 32 karakter pertama dari nilai header permintaan (request) X-Trans-Id-Extra
ke nilai ID transaksi di header respon X-Trans-Id
yang dihasilkan. Anda harus UTF-8-encode dan kemudian URL-encode informasi transaksi tambahan sebelum Anda memasukkannya dalam header permintaan X-Trans-Id-Extra
.
Misalnya, Anda dapat memasukkan informasi transaksi tambahan ketika Anda meng-upload object besar seperti image.
Ketika Anda meng-upload setiap segmen dan manifes, masukkan nilai yang sama dalam header permintaan (request) X-Trans-Id-Extra
. Jika terjadi kesalahan, Anda dapat menemukan semua permintaan yang berhubungan dengan upload objek besar di log Object Storage.
Anda juga dapat menggunakan string X-Trans-Id-Extra
membantu permintaan operator debug yang gagal untuk menerima tanggapan. operator dapat mencari informasi tambahan di log.
Sementara objek statis dan dinamis memiliki perilaku yang sama, tabel ini menggambarkan perbedaan mereka:
Deskripsi | Objek besar statis | Objek besar Dinamis |
---|---|---|
Integritas end-to-end | Terjamin. Daftar segmen memasukkan MD5 checksum (ETag ) dari setiap segmen. Anda tidak dapat meng-upload objek nyata (manifest) jika ETag dalam daftar berbeda dari objek segmen upload. Jika segmen hilang, upaya untuk men-download hasil objek nyata dalam kesalahan. |
Tidak dijamin. Model konsistensi akhir (eventual consistency model) berarti bahwa meskipun Anda telah meng-upload sebuah objek segmen, hal itu tidak mungkin akan muncul dalam daftar kontainer sampai nanti. Jika Anda men-download manifes sebelum muncul dalam kontainer, hal itu tidak merupakan bagian dari konten yang kembali dalam menanggapi permintaan GET . |
Upload order (urutan upload) | Anda harus meng-upload benda segmen sebelum meng-upload objek nyata (manifest). | Anda dapat meng-upload manifest dan segmen objek dalam urutan apapun. Anda dianjurkan untuk meng-upload objek nyata setelah segmen dalam kasus download prematur manifes terjadi. Namun, hal ini tidak ditegakkan (not enforced). |
Penghapusan atau penambahan objek segmen | Anda tidak dapat menambah atau menghapus objek segmen dari manifes. Namun, Anda dapat membuat objek nyata (manifest) benar-benar baru dengan nama yang sama dengan daftar manifest yang berbeda. | Anda dapat meng-upload object segmen baru atau menghapus segmen yang ada. Nama harus sungguh sesuai dengan PREFIX disediakan di X-Object-Manifest . |
Ukuran dan nomor objek segmen | Objek segmen harus minimal 1 MB (secara default). Objek segmen akhir dapat ukuran. Paling banyak, 1000 segmen yang didukung (secara default). | Objek segmen dapat berbagai ukuran. |
Nama kontainer objek segmen | Daftar manifest mencakup nama wadah (container) setiap objek. Object segmen dapat dalam wadah yang berbeda. | Semua objek segmen harus dalam wadah (container) yang sama. |
Metadata objek manifest | Objek memiliki X-Static-Large-Object diatur untuk true . Anda tidak menetapkan metadata ini secara langsung. Sebaliknya, sistem mengatur itu ketika Anda PUT objek manifest statis. |
Nilai X-Object-Manifest adalah CONTAINER/PREFIX , yang menunjukkan dimana objek segmen berada. Anda menyediakan header permintaan (request) ini dalam operasi PUT . |
Menyalin objek manifest | Sertakan query string ?multipart-manifest = get di permintaan COPY . Objek baru berisi manifest yang sama seperti aslinya. Objek segmen tidak disalin. Sebaliknya, kedua objek nyata asli dan baru akan berbagi set (pengaturan) objek segmen yang sama. |
Operasi COPY tidak membuat objek nyata. Untuk menduplikasi objek manifest, gunakan operasi GET untuk membaca nilai X-Object-Manifest dan menggunakan nilai ini dalam header request X-Object-Manifest dalam operasi ``PUT ``. Ini menciptakan objek manifest baru yang berbagi set (pengaturan) objek segmen yang sama sebagai objek manifest asli. |
You can use python-swiftclient
to easily upload large objects.
Upload a large file by specifying the segment size with the
--segment-size
or -S
arguments:
$ swift upload CONTAINER OBJECT_FILENAME --segment-size <bytes>
This will automatically break the file into the desired segment size
and upload segments to a container named <container>_segments
.
After upload has completed, you can download the large object as a single file:
$ swift download CONTAINER OBJECT_FILENAME
Additional large object arguments can be found by using --help
:
$ swift upload --help
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.