如何使用 PHP 在 dynamoDb 中插入多行?
How to insert multiple row in dynamoDb using PHP?
我在下面写了Json用于在dynamodb中插入,但无法插入。但是,如果我尝试不使用数组的单个元素,它工作正常。
$item = $marshaler->marshalJson('
[
{
"PK":"CATG",
"SK":"NAME#SMART_PHONE",
"TYPE":"CATG",
"ATTR":{
"name":"安いスマートフォン一覧【最安値比較】"
}
},
{
"PK":"CATG#SMART_PHONE",
"SK":"SUBCATG#IPHONE",
"TYPE":"SUBCATG",
"ATTR":{
"name":"IPHONE",
"Compa":"mac",
"uid":123
}
},
{
"PK":"CATG#SMART_PHONE#SUBCATG#IPHONE",
"SK":"PROD#PHONE11",
"TYPE":"PROD",
"ATTR":{
"name":"PHONE11",
"uid":123,
"price":112.02,
"images":[
],
"total":120
}
},
{
"PK":"CATG#SMART_PHONE#SUBCATG#IPHONE",
"SK":"PROD#PHONE7",
"TYPE":"PROD",
"ATTR":{
"name":"PHONE7",
"Compa":"mac",
"uid":124,
"price":102.02,
"images":[
],
"total":80
}
}
]
');
$params = [
'TableName' => $tableName,
'Item' => $item
];
$result = $dynamodb->putItem($params);
应用此代码后。
我有以下错误
Fatal error: Uncaught InvalidArgumentException: The JSON document must be valid and be an object at its root. in E:\xampp\htdocs\shop\vendor\aws\aws-sdk-php\src\DynamoDb\Marshaler.php:99 Stack trace: #0 E:\xampp\htdocs\shop\item.php(30): Aws\DynamoDb\Marshaler->marshalJson('\r\n [\r\n ...') #1 {main} thrown in E:\xampp\htdocs\shop\vendor\aws\aws-sdk-php\src\DynamoDb\Marshaler.php on line 99
如果我插入单行,它工作正常。如何插入批量行?
要插入多个项目,您有两个选择:
- 你可以有一个循环并为每个
PutItem
API 重复调用
- 您可以将 collection 项分成最多 25 项的组,并使用
BatchWriteItem
API (see docs)
请注意,BatchWriteItem API 仍会导致使用 25 个 WCU,但它只会为您节省一点网络 round-trips,减少调用次数。
使用 BatchWriteItem
的缺点是您必须管理项目的分组,然后处理部分成功的写入,这样不成功的项目就会得到 re-grouped/re-tried.
我在下面写了Json用于在dynamodb中插入,但无法插入。但是,如果我尝试不使用数组的单个元素,它工作正常。
$item = $marshaler->marshalJson('
[
{
"PK":"CATG",
"SK":"NAME#SMART_PHONE",
"TYPE":"CATG",
"ATTR":{
"name":"安いスマートフォン一覧【最安値比較】"
}
},
{
"PK":"CATG#SMART_PHONE",
"SK":"SUBCATG#IPHONE",
"TYPE":"SUBCATG",
"ATTR":{
"name":"IPHONE",
"Compa":"mac",
"uid":123
}
},
{
"PK":"CATG#SMART_PHONE#SUBCATG#IPHONE",
"SK":"PROD#PHONE11",
"TYPE":"PROD",
"ATTR":{
"name":"PHONE11",
"uid":123,
"price":112.02,
"images":[
],
"total":120
}
},
{
"PK":"CATG#SMART_PHONE#SUBCATG#IPHONE",
"SK":"PROD#PHONE7",
"TYPE":"PROD",
"ATTR":{
"name":"PHONE7",
"Compa":"mac",
"uid":124,
"price":102.02,
"images":[
],
"total":80
}
}
]
');
$params = [
'TableName' => $tableName,
'Item' => $item
];
$result = $dynamodb->putItem($params);
应用此代码后。 我有以下错误
Fatal error: Uncaught InvalidArgumentException: The JSON document must be valid and be an object at its root. in E:\xampp\htdocs\shop\vendor\aws\aws-sdk-php\src\DynamoDb\Marshaler.php:99 Stack trace: #0 E:\xampp\htdocs\shop\item.php(30): Aws\DynamoDb\Marshaler->marshalJson('\r\n [\r\n ...') #1 {main} thrown in E:\xampp\htdocs\shop\vendor\aws\aws-sdk-php\src\DynamoDb\Marshaler.php on line 99
如果我插入单行,它工作正常。如何插入批量行?
要插入多个项目,您有两个选择:
- 你可以有一个循环并为每个
PutItem
API 重复调用 - 您可以将 collection 项分成最多 25 项的组,并使用
BatchWriteItem
API (see docs)
请注意,BatchWriteItem API 仍会导致使用 25 个 WCU,但它只会为您节省一点网络 round-trips,减少调用次数。
使用 BatchWriteItem
的缺点是您必须管理项目的分组,然后处理部分成功的写入,这样不成功的项目就会得到 re-grouped/re-tried.