Должен ли я проверить отношения в DynamoDB? - PullRequest
0 голосов
/ 26 апреля 2019

Допустим, у меня есть приложение, в котором users может сделать posts.Я храню их в одной таблице DynamoDB, используя следующую конструкцию:

+--------+--------+---------------------------+
| PK     | SK     | (Attributes)              |
+-----------------+---------------------------+
| UserId | UserId | username, profile, etc... |  <-- user item
| UserId | PostId | body, timestamp, etc...   |  <-- post item
+--------+--------+---------------------------+

Когда user составляет post, моя функция Lambda получает следующие данные:

{
  "userId": <UserId>",
  "body": <Body>,
  etc...
}

Мой вопрос заключается в том, должен ли я сначала проверить, существует ли user, прежде чем добавлять post в таблицу, используя dynamodb.get({PK: userId, SK: userId)?Это обеспечит отсутствие каких-либо осиротевших posts, но функция также потребует и чтения, и записи.

Одна из идей, которые у меня есть, - просто написать post, потенциально оставляя сиротами posts.Тогда у меня могла бы быть другая лямбда-функция, которая периодически запускается для поиска и удаления любых сирот.

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

1 Ответ

2 голосов
/ 27 апреля 2019

"Тогда у меня может быть другая лямбда-функция, которая периодически запускается для поиска и удаления любых сирот." <- Это может стать очень дорогим со временем, особенно если вы планируете сделать это к <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Scan.html" rel="nofollow noreferrer"> сканирование таблица.

Я разрабатываю систему, основанную на DynamoDB, которая имеет аналогичные отношения, и я проверяю отношения перед сохранением данных, потому что я не хочу, чтобы данные мусора были в моих таблицах.

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

...