Схема DynamoDB - Моделирование местоположений внутри здания - PullRequest
0 голосов
/ 25 января 2020

Новое для DynamoDB здесь. Мне нужно выяснить схему DynamoDB для разных мест внутри здания. Кроме того, мне нужно иметь возможность идентифицировать компьютеры, назначенные каждому из местоположений. Места вложены в другие места. Например,

  • Здание 1
    • Крыло A
      • Этаж 1
        • Секция A
          • Офис 1
            • Компьютер A
            • Компьютер B
          • Офис 2
            • Компьютер A
        • Секция B
          • Офис 1

... и т. Д.

ОБРАЗЦЫ ДОСТУПА:

  • Показать все местоположения (крылья, полы, секции и т. д. c) в здании
  • Показать спецификацию c location
  • Показать все компьютеры, назначенные указанному c location
  • Показать местоположение указанного c компьютера

Кем я был думая:

Я изначально хотел создать что-то вроде этого:

PartitionKey              SortKey                                 Attributes

Building#1                Building#1 (For metadata)
Building#1                Section#1                                 [...]
Building#1                Section#1|Section#2                       [...]
Building#1                Section#1|Section#2|Section#3             [...]

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

Как лучше всего смоделировать расположение секций, офисов и т. Д. c здания?

Ответы [ 2 ]

1 голос
/ 25 января 2020

Если это действительно единственные шаблоны доступа, вы, вероятно, можете что-то сделать с помощью простого GSI. Я бы не использовал Building в качестве PartitionKey, потому что это даст вам много горячих точек в данных. Что-то вроде этого, вероятно, будет работать:

PartitionKey        SortKey     GSI_PartitionKey GSI_SortKey            Attributes
Building#1          'Location'                                          [...]
Wing#1              'Location'  'Location'       Building#1 .           [...]
Floor#1             'Location'  'Location'       Building#1|Wing#A      [...]
.
.
.
Computer#1          'Computer'  'Computer'       B#1|W#A|F#1|S#A|O#1    [...]
Computer#2          'Computer'  'Computer'       B#1|W#A|F#1|S#B|O#1    [...]
.
.
.

Значения SortKey здесь более необязательны, но они, как правило, позволяют вносить изменения позже без особой работы сейчас.

Чтобы получить все местоположения в здании, которое вы запрашиваете в GSI, где GSI_PartitionKey - это «Местоположение», а GSI_SortKey начинается с вашего идентификатора здания. Вы можете добавить дополнительные местоположения в строку, чтобы получить все местоположения в крыле A, начинающиеся с Building#1|Wing#A|

Получить указанное c местоположение, используя PartitionKey (и, необязательно, SortKey = 'Местоположение').

Чтобы получить все компьютеры в GSI местоположений, где GSI_PartitionKey - это "Компьютер", а GSI_SortKey начинается с вашего идентификатора местоположения.

Получить укажите c компьютер, используя PartitionKey (и, необязательно, SortKey = 'Компьютер'), атрибуты должны включать его местоположение.

0 голосов
/ 25 января 2020

Я думаю, что вы на правильном пути ...
Кодирование иерархических данных в качестве ключа сортировки с разделителями, кажется, соответствует рекомендациям, которые я видел (хотя ваши два набора примеров данных не совпадают) Section#1|Section#2|Section#3 против Wing A|Floor 1|Section A

Я бы, вероятно, подумал, что у таблицы будет только ха sh с "серийным номером" или "идентификатором актива"

Тогда сделайте GSI с ключ, который вы описываете.

...