веб-сервисы Amazon — храните и извлекайте вложенный JSON в DynamoDB с помощью PHP SDK

Я создал следующую таблицу в DynamoDB:

Field1: messageId / Type: String / Пример значения: 4873dd28-190a-4363-8299-403c535e160f

Поле2: микротайм / тип: число / пример значения: 14143960092414

Поле 3: данные / Тип: вложенными JSON-Array / Пример значения: {«foo»: «bar», «other»: {«nested»: 1}}

Я выполняю следующий запрос, используя PHP SDK для DynamoDB для создания записи

$raw = '{"foo":"bar","other":{"nested":1}}';
$result = $client->putItem(array(
'TableName' => 'requests2',
'Item' => array(
'messageId'   => array('S' => '4873dd28-190a-4363-8299-403c535e160f'),
'microtime' => array('N' => microtime(true)*10000),
'data'   => array('S' => $raw),
)
));

Затем я хочу запросить таблицу и отфильтровать, используя переменные в поле данных массива JSON. Является ли мое решение для ввода данных правильным подходом? Насколько я понимаю, JSON-массив хранится в виде строки. Нужен ли нам еще один тип данных? По сути, я уже могу запросить таблицу, как показано ниже, чтобы получить сообщения, которые были добавлены в последнюю минуту:

$iterator = $client->getIterator('Query', array(
'TableName'     => 'requests2',
'KeyConditions' => array(
'messageId' => array(
'AttributeValueList' => array(
array('S' => '4873dd28-190a-4363-8299-403c535e160f')
),
'ComparisonOperator' => 'EQ'
),
'microtime' => array(
'AttributeValueList' => array(
array('N' => strtotime("-1 minutes")*10000)
),
'ComparisonOperator' => 'GT'
)
)
));

foreach ($iterator as $item) {
echo $item['messageId']['S']." ";
}

Но как я могу изменить свой запрос, чтобы разрешить запросы по ЛЮБОМУ значению в поле данных? Например, фильтр только по тем, у кого есть [Данные] [другой] [вложенный] = 1

Я провел последние часы в этом вопросе, и я не могу заставить его работать … Я очень благодарен за любые советы, заранее спасибо!

0

Решение

Я не думаю, что в AWS PHP SDK для DynamoDB еще реализована поддержка хранения документов на основе JSON. Их недавнее уведомление опубликовано в их блоге 8 октября 2014 года, упоминает о поддержке этой новой функции только в Java, .NET, Ruby и JS SDK.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]