batchGetItem
を使用してテーブルから1つ以上のアイテムの属性を返そうとしましたが、パーティションキーとレンジキーの組み合わせでのみ動作するようですが、要求された項目はプライマリキーのみで?レンジキーなしでテーブルを作成する唯一の方法はありますか?公式文書1としてdyanmodb batchGetItemとパーティションキーとソートキー
// Adding items
$client->putItem(array(
'TableName' => $table,
'Item' => array(
'id' => array('S' => '2a49ab04b1534574e578a08b8f9d7441'),
'name' => array('S' => 'test1'),
'user_name' => array('S' => 'aaa.bbb')
)
));
// Adding items
$client->putItem(array(
'TableName' => $table,
'Item' => array(
'id' => array('S' => '4fd70b72cc21fab4f745a6073326234d'),
'name' => array('S' => 'test2'),
'user_name' => array('S' => 'aaaa.bbbb'),
'user_name1' => array('S' => 'aaaaa.bbbbb')
)
));
$client->batchGetItem(array(
"RequestItems" => array(
$table => array(
"Keys" => array(
// hash key
array(
"id" => array('S' => "2a49ab04b1534574e578a08b8f9d7441"),
// range key
"name" => array('S' => "test1"),
),
array(
// hash key
"id" => array('S' => "4fd70b72cc21fab4f745a6073326234d"),
// range key
"name" => array('S' => "test2"),
),
)
)
)
));
:
http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.Partitions.html
テーブルが複合主キー(パーティションキーとソートキー)を有する場合、 DynamoDBのパーティションキーのハッシュ値を算出します同一の データ配信:パーティションキーに記載されている方法で同じパーティションキー値を物理的に閉じる の項目のうち、すべて を一緒に格納するソートキー値によって編集されます。
Partition Key and Sort Key
を使用する利点は、物理的に同じパーティションキー値を持つすべてのアイテムを保存するのと同じですか?公式ドキュメントを1として
:
単一の操作が など、多くの100などの項目を含めることができ、データの16メガバイト、まで取得することができます。 応答サイズの制限を超えた場合、テーブルのプロビジョニングされた スループットを超えた場合、または内部処理エラーが発生した場合、BatchGetItemは部分的な結果を返します。
100個以上のアイテムが必要な場合は、どのようにリクエストを処理するのですか?コードからすべての項目をループし、毎回100回リクエストするか、AWS SDK DynamoDB経由で達成する別の方法がありますか?表作成の
例:
$client->createTable(array(
'TableName' => $table,
'AttributeDefinitions' => array(
array(
'AttributeName' => 'id',
'AttributeType' => 'N'
),
array(
'AttributeName' => 'name',
'AttributeType' => 'S'
)
),
'KeySchema' => array(
array(
'AttributeName' => 'id',
'KeyType' => 'HASH'
),
array(
'AttributeName' => 'name',
'KeyType' => 'RANGE'
)
),
'ProvisionedThroughput' => array(
'ReadCapacityUnits' => 5,
'WriteCapacityUnits' => 5
)
));
おかげ
UPDATE - マークBの答えへの質問:
はいあなたはレンジキーなしでインデックスを作成することができます。範囲キーは、完全にオプションの です。ただし、範囲キーが定義されていても、クエリーに含める場合は、 オプションです。クエリーにハッシュ キーを指定するだけで、範囲キーに基づいて返される になるハッシュキーを持つすべてのアイテムを取得することができます。
ハッシュキーと範囲キーを持つテーブルのクエリでハッシュキーのみを指定すると、範囲キーなしのテーブルのクエリでハッシュキーのみを指定すると以下のエラーが表示されます。 インデックスのない表に注意してください。
An uncaught Exception was encountered
Type: Aws\DynamoDb\Exception\DynamoDbException
Message: Error executing "BatchGetItem" on "https://dynamodb.eu-central-1.amazonaws.com"; AWS HTTP error: Client error: `POST https://dynamodb.eu-central-1.amazonaws.com` resulted in a `400 Bad Request` response:
{"__type":"com.amazon.coral.validate#ValidationException","message":"The provided key element does not match the schema" (truncated...)
ValidationException (client): The provided key element does not match the schema - {"__type":"com.amazon.coral.validate#ValidationException","message":"The provided key element does not match the schema"}
Filename: /var/app/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php
私はあなたの答えにコメントをしています、私は私の質問を更新します。 – Berlin
@Berlin私は 'BatchGetItem'リクエストの代わりに' Query'を発行する必要があると思います。 –
は 'Query'で動作しますが、私はパフォーマンスのために' BatchGetItem'を使うことを好みます。 – Berlin