Фотография LIKE, КОММЕНТАРИИ NOSql Дизайн базы данных
Я пытаюсь внедрить систему LIKE и COMMENT, такую как Instagram и Facebook, в DynamoDB.
У меня есть 3 таблицы, пользователь, фото и photo_likes
Таблица пользователя и таблица фотографий имеют ключи user_id и photo_id.
и для таблицы photo_likes у меня есть photo_id в качестве ключа и колонка likes_by, где я храню user_id в виде списка.
Итак, если photo_id 1 нравится user_id 10, 35, я сохраняю его как:
| photo_id | liked_by |
| 1 | {10,35} |
Я действительно смущен, если это правильный способ сделать это? или я должен просто вставить новую строку всякий раз, когда их новый как.
| photo_id | user_id |
| 1 | 10 |
| 1 | 35 |
1 ответ
Я предоставлю преимущества и недостатки вышеуказанных подходов. Возможно, вам придется выбрать правильный подход, основанный на ваших шаблонах доступа запросов, необходимых для вашего приложения.
Подход 1:
| photo_id | liked_by |
| 1 | {10,35} |
Преимущество и предложение:-
- Мое предложение будет хранить
liked_by
какNS
или жеSS
а не список. Так что у него не будет дубликатов. - Все
liked_by
присутствуют в том же пункте. Это поможет во время поиска и отображения результатов в графическом интерфейсе, если это необходимо
Недостаток:-
- Невозможно создать индекс (в случае необходимости) для нескалярных типов данных (SS, NS или List)
- Помните о максимальном размере (400 КБ) элемента в DynamoDB. Это может повлиять на модель данных, если число лайков увеличится до неожиданных значений, что может повлиять на размер элемента
Подход 2:
| photo_id | user_id |
| 1 | 10 |
| 1 | 35 |
Вы можете определить photo_id
в качестве ключа раздела и user_id
в качестве ключа сортировки.
Преимущества:-
- Вы можете создать индекс по user_id, если требуется
- Вы можете отсортировать данные по user_id (если определен как ключ сортировки)
- Не нужно беспокоиться о размере элемента 400 КБ
Недостаток:-
- Подсчет
likes
должно быть сделано на стороне клиента путем итерации значений. В подходе 1 вы можете использовать некоторыеarray.length
чтобы получитьlikes
подсчитывать - Количество элементов в наборе результатов запроса будет большим, что может быть трудно для решения. Этот момент зависит от того, есть ли у вас сценарий использования, чтобы получить список фотографий и его
likes
считать или любой другой sceanrio