#amazon-web-services #amazon-dynamodb
#amazon-веб-сервисы #amazon-dynamodb
Вопрос:
Я создаю бессерверный проект в aws. Я новичок в dynamodb и хотел бы создать 2 таблицы, публикации и лайки.
PostsDynamoDBTable:
Type: 'AWS::DynamoDB::Table'
Properties:
AttributeDefinitions:
- AttributeName: userId
AttributeType: S
- AttributeName: postId
AttributeType: S
- AttributeName: createdAt
AttributeType: S
KeySchema:
- AttributeName: postId
KeyType: HASH
- AttributeName: userId
KeyType: RANGE
BillingMode: PAY_PER_REQUEST
TableName: ${self:provider.environment.POSTS_TABLE}
GlobalSecondaryIndexes:
- IndexName: ${self:provider.environment.USER_ID_INDEX}
KeySchema:
- AttributeName: userId
KeyType: HASH
- AttributeName: createdAt
KeyType: RANGE
Projection:
ProjectionType: ALL
LikesDynamoDBTable:
Type: 'AWS::DynamoDB::Table'
Properties:
AttributeDefinitions:
- AttributeName: userId
AttributeType: S
- AttributeName: postId
AttributeType: S
- AttributeName: likeId
AttributeType: S
- AttributeName: createdAt
AttributeType: S
KeySchema:
- AttributeName: likeId
KeyType: HASH
- AttributeName: postId
KeyType: RANGE
BillingMode: PAY_PER_REQUEST
TableName: ${self:provider.environment.LIKES_TABLE}
GlobalSecondaryIndexes:
- IndexName: ${self:provider.environment.USER_ID_INDEX}
KeySchema:
- AttributeName: userId
KeyType: HASH
- AttributeName: createdAt
KeyType: RANGE
Projection:
ProjectionType: ALL
Мне интересно, как я могу запрашивать / сканировать сообщения, чтобы получать все сообщения с лайками, которые также связаны с ними?
await this.docClient
. scan({
TableName: this.postsTable,
})
.promise()
Ответ №1:
DynamoDB — это совершенно иная парадигма, чем базы данных SQL. Хранение сообщений и лайков в их собственных таблицах является распространенным шаблоном в базах данных SQL, потому что у вас есть join
операция SQL. У вас нет join
операции в DDB, поэтому вы не продвинетесь далеко в построении своих таблиц таким образом.
В DynamoDB считается лучшей практикой использовать одну таблицу для вашего приложения и предварительно объединять ваши данные (помните, никаких объединений). Вероятно, это означает, что ваши данные Post и Like будут храниться вместе под одним и тем же ключом раздела.
Я бы рекомендовал уделить время просмотру этого доклада о моделировании данных в DynamoDB. Этот доклад — одно из лучших введений в моделирование даты DDB, которое я видел.