Создайте таблицу DynamoDB с глобальным вторичным индексом.Php

Кемеровские программисты php общаются здесь
Ответить
Гость
 Создайте таблицу DynamoDB с глобальным вторичным индексом.

Сообщение Гость »


Я новичок в AWS DynamoDB и в nosql в целом, и у меня возникла проблема с созданием таблиц.

Я пытаюсь создать таблицу с именем User со следующими атрибутами:
[*]Идентификатор пользователя (HASH) [*]Тип ОС (ДИАПАЗОН) [*]MSISDN [*]IMSI [*]Идентификатор устройства
Мне нужно запросить таблицу не только по UserId, но и по следующим полям:
[*]MSISDN [*]IMSI [*]Идентификатор устройства
Моя логика такова:
[*]Запросите таблицу по полю UserId. [*]Если запрос не дал результатов, создайте новый, но убедитесь, что нет других пользователей с тем же MSISDN, ИЛИ тем же IMSI< Поле /code> ИЛИ то же поле DeviceID.
После прочтения руководства по LSI/GSI у меня возникли трудности с пониманием того, как создать таблицу и определить эти индексы.

Это код, который я пытаюсь выполнить для создания таблицы с помощью PHP+AWS SDK:

$client->createTable(array( 'ИмяТаблицы' => 'Пользователь', 'AttributeDefinitions' => массив( array('AttributeName' => 'UserId', 'AttributeType' => 'S'), array('AttributeName' => 'OSType', 'AttributeType' => 'S'), array('AttributeName' => 'MSISDN', 'AttributeType' => 'S'), array('AttributeName' => 'IMSI', 'AttributeType' => 'S'), array('AttributeName' => 'DeviceID', 'AttributeType' => 'S'), ), 'KeySchema' => массив( array('AttributeName' => 'UserId', 'KeyType' => 'HASH'), массив('AttributeName' => 'OSType', 'KeyType' => 'RANGE') ), 'GlobalSecondaryIndexes' => массив( множество( 'ИмяИндекса' => 'IMSIИндекс', 'KeySchema' => массив( array('AttributeName' => 'IMSI', 'KeyType' => 'HASH') ), 'Проекция' => массив( 'ProjectionType' => 'KEYS_ONLY', ), 'ProvisionedThroughput' => массив( 'ReadCapacityUnits' => 10, 'WriteCapacityUnits' => 10 ) ), множество( 'ИмяИндекса' => 'MSISDNIndex', 'KeySchema' => массив( массив('AttributeName' => 'MSISDN', 'KeyType' => 'HASH') ), 'Проекция' => массив( 'ProjectionType' => 'KEYS_ONLY', ), 'ProvisionedThroughput' => массив( 'ReadCapacityUnits' => 10, 'WriteCapacityUnits' => 10 ) ), множество( 'IndexName' => 'DeviceIDIndex', 'KeySchema' => массив( array('AttributeName' => 'DeviceID', 'KeyType' => 'HASH') ), 'Проекция' => массив( 'ProjectionType' => 'KEYS_ONLY', ), 'ProvisionedThroughput' => массив( 'ReadCapacityUnits' => 10, 'WriteCapacityUnits' => 10 ) ), ), 'ProvisionedThroughput' => массив( 'ReadCapacityUnits' => 50, 'WriteCapacityUnits' => 50 ) )); Я получаю эту ошибку:

Неустранимая ошибка PHP: Uncaught Aws\DynamoDb\Exception\ValidationException: Код ошибки AWS: ValidationException, Код состояния: 400, Идентификатор запроса AWS: 70LGIARTTQF90S8P0HVRUKSJ27VV4KQNSO5AEMVJF66Q9ASUAAJG, Тип ошибки AWS: клиент, Сообщение об ошибке AWS: один или несколько параметров значения недействительны: количество атрибутов в KeySchema не совсем соответствует количеству атрибутов, определенных в AttributeDefinitions, User-Agent: aws-sdk-php2/2.4.11 Guzzle/3.7.4 Curl/7.29.0 PHP/5.4.14 Помогите мне понять, что я делаю не так. Хочу создать таблицу с помощью GSI, но никак не могу понять суть вторичного индекса в DynamoDB :(
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»