如何使用 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

如果我插入单行,它工作正常。如何插入批量行?

要插入多个项目,您有两个选择:

  1. 你可以有一个循环并为每个 PutItem API 重复调用
  2. 您可以将 collection 项分成最多 25 项的组,并使用 BatchWriteItem API (see docs)

请注意,BatchWriteItem API 仍会导致使用 25 个 WCU,但它只会为您节省一点网络 round-trips,减少调用次数。

使用 BatchWriteItem 的缺点是您必须管理项目的分组,然后处理部分成功的写入,这样不成功的项目就会得到 re-grouped/re-tried.