2017-01-14 5 views
0

Я новичок в DynamoDb и noSql в целом.Дизайн базы данных DynamoDb

У меня есть таблица users и таблица notes. Пользователь может создавать заметки, и я хочу получить все заметки, связанные с пользователем.

Одно решение, о котором я думал, - каждый раз, когда сохраняется записка, идентификатор примечания хранится внутри атрибута «примечания» внутри таблицы пользователя. Это позволит мне запросить таблицу пользователей для всех записных идентификаторов, а затем запросить заметки, используя эти идентификаторы:

UserTable: 
UserId: 123456789 
notes: ['note-id-1', note-id-2] 

NotesTable 
id: note-id-1 
text: "Some note" 

это правильный подход? Единственный другой способ, который я могу представить, - это иметь таблицу примечаний с атрибутом userId, поэтому я могу запросить таблицу заметок на основе этого userId. Очевидно, что подобный подход более реляционный.

ответ

2

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

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

Если вы сделаете это в этом ответе, вам понадобится один запрос, чтобы получить все заметки пользователя (я не предполагаю, что вы разбиты на страницы) и один, чтобы получить информацию о пользователе. Никогда не будет больше, чем 2.

Общее правило:

  • SQL: хранение = дорого, расчет = дешевый
  • NoSQL: хранение = дешевы, вычисление = дорого

Так всегда старайтесь как можно меньше запросов.

+1

Спасибо, Luc, Мои глаза открылись миру вторичных индексов! –

 Смежные вопросы

  • Нет связанных вопросов^_^