Эффективно ли использовать несколько глобальных индексов в одной таблице DynamoDB? - PullRequest
0 голосов
/ 05 февраля 2019

Выход из набора данных, как описано в таблице ниже.Sr.no используется в таблице ниже только для справки

|sr.no|    id    | tis |data-type|   b.id   |idType_2|  var_2 |     
|-----|----------|-----|---------|----------|--------|--------|
|  1  |abc-def-gi|12345|  a-type |1234567890| 843023 | NULL   |
|-----|----------|-----|---------|----------|--------|--------| 
|  2  |1234567890|12346|  b-type |    NULL  |  NULL  |40030230|
|-----|----------|-----|---------|----------|--------|--------|
|  3  |abc-def-gj|12347|  a-type |1234567890| 843023 |  NULL  |

Типы запросов

  1. Ввод id и если data-type равно a-type поля возврата tis,b.id,id_type2 ссылка sr.no=1
  2. Ввод id и, если data-type b-type поле возврата var_2 ссылка sr.no=2
  3. Ввод id_type2 поля возвратаid,tis,b.id из sr.no=1,3
  4. Ввод data-type возврат id на основе tis between 12345 and 12347

Примечание

  • sr.no=1,3 или a-type данных вставляются по 100 000 раз в день, а уникальные id
  • sr.no=2 или b-type данных являются фиксированным набором данных.

Эффективен ли приведенный ниже ключевой подход для такого набора данных?Есть ли какой-то другой подход, который можно использовать для хранения и извлечения данных из DynamoDB?

Partition Key = id, чтобы позаботиться о Query 1,2.

GSI1=id_type2 and GSI1SK=id, чтобы позаботиться о Query 3

GSI2=data-type and GSI2SK=tis, чтобы позаботиться о Query 4

1 Ответ

0 голосов
/ 05 февраля 2019

Вот мои мысли:

1) если у вас есть данные с разными шаблонами доступа, вам следует рассмотреть возможность разделения данных на разные таблицы

2) если к данным обращаются вместе, сохраните ихвместе - это означает, что если всякий раз, когда вы читаете данные a-типа для некоторой моделируемой сущности, вам также необходимо прочитать одну или несколько записей b-типа для одной и той же сущности, целесообразно поместить все эти записи в одну и ту же таблицу,под тем же ключом раздела

Чтобы привести все это домой, в вашем примере, идентификатор для данных типа a и типа b отличается.Это означает, что вы получаете 0 преимуществ от хранения обоих типов a и b в одной таблице.Используйте две разные таблицы.

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

Основное различие между реляционными и нереляционными базами данных состоит в том, что в нереляционных хранилищах нет перекрестных объединений таблиц, поэтому один из принципов реляционных баз данных - нормализация данных, противоположное имеет место в случае нереляционных.

...