Large objects (benda besar)

Large objects (benda besar)

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:

    Static large objects (object besar statis)

    Isi objek manifest adalah sebuah ordered list nama object segmen dalam format JSON. Lihat :ref: static_large_objects.

    Dynamic large objects (objek besar yang dinamis)

    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.

Static large objects (object besar statis)

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:

path
Wadah (container) dan objek nama dalam format: CONTAINER_NAME/OBJECT_NAME.
etag
MD5 checksum dari isi dari objek segmen. Nilai ini harus sesuai dengan ETag dari objek itu.
size_bytes
Ukuran dari objek segmen. Nilai ini harus sesuai dengan Content-Length dari objek itu.

Daftar manifest objek besar statis

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.

Dynamic large objects (objek besar yang dinamis)

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.

Upload segmen permintaan (request) objek besar: HTTP

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.

Upload segmen permintaan objek besar berikutnya: HTTP

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.

Upload permintaan (request) manifest: HTTP

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

Upload respon manifest: HTTP

[...]

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.

Informasi transaksi tambahan

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.

Perbandingan object besar (large object) statis dan dinamis

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.

Upload large objects with python-swiftclient

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
    
Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.