Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
penting
Bagian ini mengacu pada API versi 05/12/2011, yang sudah usang dan tidak boleh digunakan untuk aplikasi baru.
Untuk dokumentasi tentang API tingkat rendah saat ini, lihatReferensi API Amazon DynamoDB Dynamo.
Deskripsi
Operasi ini memungkinkan Anda untuk menempatkan atau menghapus beberapa item di beberapa tabel dalam satu panggilan.
Untuk mengunggah satu item, Anda dapat menggunakan PutItem
, dan untuk menghapus satu item, Anda dapat menggunakan DeleteItem
. Namun, jika Anda ingin mengunggah atau menghapus sejumlah besar data, seperti mengunggah sejumlah besar data dari Amazon EMR (Amazon EMR) atau memigrasi data dari database lain ke DynamoDB, BatchWriteItem
menawarkan alternatif yang efisien.
Jika Anda menggunakan bahasa seperti Java, Anda dapat menggunakan thread untuk mengunggah item secara paralel. Hal ini menambah kompleksitas dalam aplikasi Anda untuk menangani thread. Bahasa lain tidak mendukung threading. Misalnya, jika Anda menggunakan PHP, Anda harus mengunggah atau menghapus item satu per satu. Dalam kedua situasi, BatchWriteItem
menyediakan alternatif di mana operasi menempatkan dan menghapus yang ditentukan diproses secara paralel, memberikan Anda kekuatan pendekatan thread pool tanpa harus memasukkan kompleksitas dalam aplikasi Anda.
Perhatikan bahwa setiap operasi menempatkan dan menghapus individual yang ditentukan dalam operasi BatchWriteItem
berbiaya sama dalam hal unit kapasitas yang digunakan. Namun, karena BatchWriteItem
melakukan operasi yang ditentukan secara paralel, Anda mendapatkan latensi yang lebih rendah. Operasi hapus pada item yang tidak ada mengonsumsi 1 unit kapasitas tulis. Untuk informasi lebih lanjut tentang unit kapasitas yang digunakan, lihat Bekerja dengan tabel dan data di DynamoDB.
Saat menggunakan BatchWriteItem
, perhatikan batasan berikut:
-
Operasi maksimum dalam satu permintaan – Anda dapat menentukan hingga total 25 operasi menempatkan atau menghapus; namun, total permintaan ukuran tidak dapat melampaui 1 MB (payload HTTP).
-
Anda dapat menggunakan operasi
BatchWriteItem
hanya untuk menempatkan dan menghapus item. Anda tidak dapat menggunakannya untuk memperbarui item yang ada. -
Bukan operasi atom – Operasi individu yang ditentukan dalam
BatchWriteItem
adalah atomik; namunBatchWriteItem
secara keseluruhan adalah operasi "upaya terbaik" dan bukan operasi atomik. Artinya, dalam permintaanBatchWriteItem
, beberapa operasi mungkin berhasil dan yang lainnya mungkin gagal. Operasi yang gagal dikembalikan ke bidangUnprocessedItems
dalam respons. Sejumlah kegagalan ini mungkin karena Anda melampaui throughput yang disediakan dan dikonfigurasi untuk tabel atau kegagalan sementara seperti kesalahan jaringan. Anda dapat menyelidiki dan secara opsional mengirim ulang permintaan. Biasanya, Anda memanggilBatchWriteItem
dalam satu putaran dan di setiap pemeriksaan pengulangan untuk item yang belum diproses, dan mengirimkan permintaanBatchWriteItem
baru dengan item yang belum diproses tersebut. -
Tidak mengembalikan item apa pun –
BatchWriteItem
dirancang untuk mengunggah data dalam jumlah besar secara efisien. Hal itu tidak menyediakan sejumlah kecanggihan yang ditawarkan olehPutItem
danDeleteItem
. Sebagai contoh,DeleteItem
mendukung bidangReturnValues
di isi permintaan Anda untuk meminta item yang dihapus dalam respons. OperasiBatchWriteItem
tidak mengembalikan item apa pun dalam respons. -
Tidak seperti
PutItem
danDeleteItem
,BatchWriteItem
tidak memungkinkan Anda untuk menentukan syarat pada permintaan tulis individu dalam operasi. -
Nilai atribut tidak boleh null; atribut jenis string dan biner harus memiliki panjang lebih dari nol; dan atribut jenis set tidak boleh kosong. Permintaan yang memiliki nilai kosong akan ditolak dengan
ValidationException
.
DynamoDB menolak keseluruhan batch operasi penulisan jika salah satu dari yang berikut ini benar:
-
Jika satu atau beberapa tabel yang ditentukan dalam permintaan
BatchWriteItem
tidak ada. -
Jika atribut kunci primer yang ditentukan pada item dalam permintaan tidak cocok dengan skema kunci primer dalam tabel yang sesuai.
-
Jika Anda mencoba untuk melakukan beberapa operasi pada item yang sama dalam permintaan
BatchWriteItem
yang sama. Sebagai contoh, Anda tidak dapat menempatkan dan menghapus item yang sama dalam permintaanBatchWriteItem
yang sama. -
Jika ukuran permintaan total melampaui batas ukuran permintaan 1 MB (payload HTTP).
-
Jika setiap item individu dalam suatu batch melampaui batas ukuran item 64 KB.
Permintaan
Sintaksis
// This header is abbreviated. For a sample of a complete header, see DynamoDB tingkat rendah API. POST / HTTP/1.1 x-amz-target: DynamoDB_20111205.BatchGetItem content-type: application/x-amz-json-1.0 { "RequestItems" : RequestItems } RequestItems { "
TableName1
" : [ Request, Request, ... ], "TableName2
" : [ Request, Request, ... ], ... } Request ::= PutRequest | DeleteRequest PutRequest ::= { "PutRequest" : { "Item" : { "Attribute-Name1
" : Attribute-Value, "Attribute-Name2
" : Attribute-Value, ... } } } DeleteRequest ::= { "DeleteRequest" : { "Key" : PrimaryKey-Value } } PrimaryKey-Value ::= HashTypePK | HashAndRangeTypePK HashTypePK ::= { "HashKeyElement" : Attribute-Value } HashAndRangeTypePK { "HashKeyElement" : Attribute-Value, "RangeKeyElement" : Attribute-Value, } Attribute-Value ::= String | Numeric| Binary | StringSet | NumericSet | BinarySet Numeric ::= { "N": "Number
" } String ::= { "S": "String
" } Binary ::= { "B": "Base64 encoded binary data
" } StringSet ::= { "SS": [ "String1
", "String2
", ... ] } NumberSet ::= { "NS": [ "Number1
", "Number2
", ... ] } BinarySet ::= { "BS": [ "Binary1
", "Binary2
", ... ] }
Dalam isi permintaan, objek JSON RequestItems
menggambarkan operasi yang ingin Anda lakukan. Operasi dikelompokkan berdasarkan tabel. Anda dapat menggunakan BatchWriteItem
untuk memperbarui atau menghapus beberapa item di beberapa tabel. Untuk setiap permintaan penulisan khusus, Anda harus mengidentifikasi jenis permintaan (PutItem
, DeleteItem
) diikuti dengan informasi terperinci tentang operasi.
-
Untuk
PutRequest
, Anda memberikan item, yaitu daftar atribut dan nilai-nilainya. -
Untuk
DeleteRequest
, Anda memberikan nama dan nilai kunci utama.
Respons
Sintaksis
Berikut ini adalah sintaks dari isi JSON yang dikembalikan dalam respons.
{ "Responses" : ConsumedCapacityUnitsByTable "UnprocessedItems" : RequestItems } ConsumedCapacityUnitsByTable { "
TableName1
" : { "ConsumedCapacityUnits", :NumericValue
}, "TableName2
" : { "ConsumedCapacityUnits", :NumericValue
}, ... } RequestItems This syntax is identical to the one described in the JSON syntax in the request.
Kesalahan Khusus
Tidak ada kesalahan khusus untuk operasi ini.
Contoh
Contoh berikut menunjukkan permintaan HTTP POST dan respons menggunakan dari operasi BatchWriteItem
. Permintaan menentukan operasi berikut pada tabel Balas dan Thread:
-
Menempatkan item dan menghapus item dari tabel Balas
Menempatkan item ke dalam tabel Thread
Untuk contoh menggunakan SDK AWS, lihat Bekerja dengan item dan atribut di DynamoDB.
Permintaan sampel
// This header is abbreviated. For a sample of a complete header, see DynamoDB tingkat rendah API. POST / HTTP/1.1 x-amz-target: DynamoDB_20111205.BatchGetItem content-type: application/x-amz-json-1.0 { "RequestItems":{ "Reply":[ { "PutRequest":{ "Item":{ "ReplyDateTime":{ "S":"2012-04-03T11:04:47.034Z" }, "Id":{ "S":"DynamoDB#DynamoDB Thread 5" } } } }, { "DeleteRequest":{ "Key":{ "HashKeyElement":{ "S":"DynamoDB#DynamoDB Thread 4" }, "RangeKeyElement":{ "S":"oops - accidental row" } } } } ], "Thread":[ { "PutRequest":{ "Item":{ "ForumName":{ "S":"DynamoDB" }, "Subject":{ "S":"DynamoDB Thread 5" } } } } ] } }
Contoh respons
Respons contoh berikut menunjukkan operasi put pada tabel Thread dan Balas yang berhasil dan operasi hapus pada tabel Balas yang gagal (karena alasan seperti throttling yang disebabkan saat Anda melampaui throughput yang disediakan di tabel). Perhatikan hal berikut dalam respons JSON:
-
Objek
Responses
menunjukkan satu unit kapasitas yang digunakan pada tabelThread
danReply
sebagai hasil dari kesuksesan operasi put pada setiap tabel ini. -
Objek
UnprocessedItems
menunjukkan kegagalan operasi hapus pada tabelReply
. Anda kemudian dapat mengeluarkan panggilanBatchWriteItem
baru untuk mengatasi permintaan yang belum diproses ini.
HTTP/1.1 200 OK
x-amzn-RequestId: G8M9ANLOE5QA26AEUHJKJE0ASBVV4KQNSO5AEMVJF66Q9ASUAAJG
Content-Type: application/x-amz-json-1.0
Content-Length: 536
Date: Thu, 05 Apr 2012 18:22:09 GMT
{
"Responses":{
"Thread":{
"ConsumedCapacityUnits":1.0
},
"Reply":{
"ConsumedCapacityUnits":1.0
}
},
"UnprocessedItems":{
"Reply":[
{
"DeleteRequest":{
"Key":{
"HashKeyElement":{
"S":"DynamoDB#DynamoDB Thread 4"
},
"RangeKeyElement":{
"S":"oops - accidental row"
}
}
}
}
]
}
}