2016-08-05 5 views
0

ich eine DynamoDB Tabelle mit einer Partition Schlüssel id und Sortierschlüssel valuebatchWriteItem mit der gleichen Partition Schlüssel

Jetzt habe ich möchte batchWriteItem laufen mehrere Elemente mit der gleichen Partition Schlüssel und einem anderen Sortierschlüssel aber es einfügen nur fügt das letzte Element:

$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'), 
        ]], 

      ], 
     ], 

    ], 
]); 

mit diesem Code nur das Element mit dem Wert 3 eingefügt wird

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

Gibt es etwas falsch mit dem Code oder etwas, das ich nicht berücksichtigt habe?

Es funktioniert perfekt, wenn einzelne Anfragen zu tun:

$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'), 
    ), 
)); 

Gibt es einen Unterschied zwischen performence batchWriteItem oder 3 Einzel putItem reuests in Folge zu tun?

Antwort

1

Sie verwenden falsche Syntax für batchWrite versuchen, folgende

$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'), 
        ] 
        ], 
      ], 
     ], 

    ], 
]); 

Abgesehen davon, dass der Unterschied zwischen den einzelnen Einsatz und mehrere Einsätze würde der Anruf mit DynamoDB zu verbinden sein, in batchPut werden Sie gesamte Array senden an einmal, während in einzelnen einfügen wird es jedes Mal mit DB verbinden, wenn es versucht, eine Operation auszuführen.

Im Allgemeinen können Sie Batch verwenden, um Dinge schneller zu verarbeiten.

Hier ist die refernce link for batchWrite syntax

Hoffnung, das hilft.

+0

Ich habe es mit Ihrer Syntax versucht und es wird nur die Zeile mit Wert 2 einfügen, die mit Wert 1 wird ignoriert. – maddo7

+0

Haben Sie den Referenzlink überprüft? –

Verwandte Themen