2016-08-05 3 views
0

У меня есть таблица dynamodb с перегородкой ключа id и своего рода ключом valuebatchWriteItem с того же раздела ключа

Теперь я хочу, чтобы запустить batchWriteItem вставить несколько элементов с одинаковым ключом разделов и разного рода ключом, но это вставляет только последний пункт:

$response = $dynamoDb->batchWriteItem([ 
    'RequestItems' => [ 
     'mytable' => [ 
      [ 
       'PutRequest' => [ 
        'Item' => [ 
         'id' => array('S' => '123abc'), 
         'value' => array('N' => '1'), 
        ], 
        'Item' => [ 
         'id' => array('S' => '123abc'), 
         'value' => array('N' => '2'), 
        ], 
        'Item' => [ 
         'id' => array('S' => '123abc'), 
         'value' => array('N' => '3'), 
        ]], 

      ], 
     ], 

    ], 
]); 

с помощью этого кода только элемент со значением 3 получает вставленной

"Items": [ 
     { 
      "id": { 
       "S": "123abc" 
      }, 
      "value": { 
       "N": "3" 
      } 
     } 
    ], 

Есть что-то не так с кодом или что-то, что я не рассматривал?

Это отлично работает при выполнении одиночных запросов:

$response = $dynamoDb->putItem(array(
    'TableName' => 'mytable', 
    'Item' => array(
     'id' => array('S' => '123abc'), 
     'value' => array('N' => '1'), 
    ), 
)); 

$response = $dynamoDb->putItem(array(
    'TableName' => 'mytable', 
    'Item' => array(
     'id' => array('S' => '123abc'), 
     'value' => array('N' => '2'), 
    ), 
)); 

$response = $dynamoDb->putItem(array(
    'TableName' => 'mytable', 
    'Item' => array(
     'id' => array('S' => '123abc'), 
     'value' => array('N' => '3'), 
    ), 
)); 

Есть ли разница между Performence batchWriteItem или делать 3 односпальные putItem reuests в последовательности?

ответ

1

Вы используете неправильный синтаксис для batchWrite, попробуйте следующее

$response = $dynamoDb->batchWriteItem([ 
    'RequestItems' => [ 
     'mytable' => [ 
      [ 
       'PutRequest' => [ 
        'Item' => [ 
         'id' => array('S' => '123abc'), 
         'value' => array('N' => '1'), 
        ] 
        ], 
        'PutRequest' => [ ///Entire PutRequest array need to be repeated not just item array/// 
         'Item' => [ 
         'id' => array('S' => '123abc'), 
         'value' => array('N' => '2'), 
        ] 
        ], 
      ], 
     ], 

    ], 
]); 

Кроме того, разница между одной вставкой и несколькими вкладышами бы вызовом, чтобы соединиться с DynamoDB, в batchPut пошлет весь массив в один раз, тогда как в одной вставке он будет подключаться к БД каждый раз, когда он пытается выполнить любую операцию.

В общем, вы можете использовать пакетную обработку для ускорения процесса.

здесь является Refernce link for batchWrite syntax

Надежда, что помогает.

+0

Я попробовал это с вашим синтаксисом, и он будет только вставлять строку со значением 2, то значение со значением 1 будет проигнорировано. – maddo7

+0

Вы проверили ссылку –

Смежные вопросы