Создание индексов из вложенной структуры в DynamoDB - PullRequest
0 голосов
/ 24 августа 2018

Интересно, возможно ли создать индекс, который мог бы выглядеть следующим образом

{
  "dispenserId": "my-dispenser-123",  // primary key
  "users": ["user5", "user12"],
  "robotId": "my-robot-1",
  "enabled": true,
  "side": left
}

На основании моих документов DynamoDB, которые выглядят следующим образом

{
  "robotId": "my-robot-1",    // primary key
  "dispensers": {
    "left": "left-dispenser-123",
    "right": "right-dispenser-123",
    "users": ["user5", "user12"]
  },
  "enabled": true,
  "users": ["user1", "user32"]
}

Я не могу понять, как указать на dispensers.left или dispensers.right и использовать это в качестве ключа, также я не могу понять, как создать атрибут side: left/right на основе пути к идентификатору диспенсера.

Может ли это быть достигнуто с нынешней структурой? Если нет, какую структуру документа вы бы предложили вместо этого. что позволяет мне хранить те же данные?

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Моя новая структура выглядит так

partition key: robotId
sort key: compoundKey

[
  {
    "robotId": "robot1", 
    "enabled": true, 
    "users": [
      "user1", 
      "user3"
    ], 
    "compositeKey": "robot--robot1"
  }, 
  {
    "robotId": "robot1", 
    "dispenserId": "dispenser1", 
    "compositeKey": "dispenser--dispenser1", 
    "side": "left", 
    "users": [
      "user4", 
      "user61"
    ]
  }
]

Тогда у меня есть индекс с dispenserId в качестве ключа раздела, так что я могу либо искать диспенсеры для данного робота (используя таблицу), либо искать подробности о дозаторе (используя индекс)

0 голосов
/ 24 августа 2018

То, что вы пытаетесь сделать (использовать элемент карты в качестве ключевого атрибута для индекса), не поддерживается DynamoDB.

Ключ индекса индекса и ключ сортировки (если есть) могут быть любыми атрибутами базовой таблицы типа строка, число или двоичный файл. ( Источник )

Вы не можете использовать (элемент) атрибут карты в качестве ключевого атрибута для индекса, поскольку атрибут ключа должен быть строковым, числовым или двоичным атрибутом из базовой таблицы.

Подумайте об использовании шаблона проектирования списка смежности для своих данных. Это позволит вам легко добавлять левый и правый дозаторы в ваш индекс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...