база данных первичного ключа DynamoDB или другой - PullRequest
1 голос
/ 18 марта 2019

Я использую DynamoDB для моего навыка Alexa.В документации к DynamoDB говорится, что первичный ключ (и любые вторичные индексы) должен быть одного из трех типов: двоичный, строковый, числовой.Мне было интересно, есть ли способ поиска в базе данных с использованием массива или таких вещей, как «теги», чтобы попытаться сопоставить элемент в базе данных с наиболее подходящими «тегами», используемыми для поиска элементов.Если это невозможно с DynamoDB, есть ли другие базы данных, которые позволяют эту функцию?Иначе, какой сервис я мог бы использовать (помимо базы данных), который позволил бы мне делать такие запросы?

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

С DynamoDB вы можете достичь этого, если ваш первичный ключ состоит из

  • ключ раздела (некоторый уникальный идентификатор для каждого элемента) и
  • ключ сортировки (определенный тег)

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

Структура будет выглядеть примерно так

Partition (ID) | Sort (Tag) | other attributes
1234           | node.js    | { timestamp: "...", message: "...", ... }
1234           | database   | { timestamp: "...", message: "...", ... }
1234           | alexa      | { timestamp: "...", message: "...", ... }

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

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

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

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

0 голосов
/ 18 марта 2019

DynamoDB был разработан для быстрого чтения / записи и огромного масштабирования. Лучший способ использовать DynamoDB - это сбросить систему данных записи и затем получить доступ ко всему объекту, используя некоторый идентификатор. Некоторые компромиссы были сделаны, чтобы обеспечить скорость. Один из них - сложные запросы. Для вашего случая использования, я думаю, ElasticSearch является лучшим вариантом.

...