我计划将AWS Cognito用于用户身份验证,使用DynamoDB进行持久性,并使用AppSync(和许多Mobile Hub)来为API提供支持 - 书评网站.
我很难确定哪个字段应该是我的哈希键,哪个应该是我的排序键,以及我应该创建哪个LSI/GSI.
我有一份书籍清单,详细信息如下:
type Book {
isbn: Int!
year: Int!
title: String!
description: String
front_cover_photo_url: String
genre_ids: [Int]
count_thumbs: Int
us_release_date: String
upcoming_release: Boolean
currently_featured_in_book_stores: Boolean
best_seller: Boolean
reviews: [Review]
}
Run Code Online (Sandbox Code Playgroud)
每次用户撰写有关图书的评论时,我也会有评论记录.
type Review {
isbn: Int!
id: ID!
created_at: String!
# The user that submitted the review
user_id: String!
# The number of thumbs out of 5
thumbs: Int!
# Comments on the review
comments: String!
}
Run Code Online (Sandbox Code Playgroud)
在我的案例中,书籍可以有多种类型 - 例如"幻想"和"戏剧".书籍也有用户评论,其数据存储在Cognito中.我们将在每本书旁边以反向时间顺序显示评论.
问题1:如果我将非规范化并Drama用作流派而不是流派ID 2 …
amazon-web-services amazon-dynamodb amazon-cognito graphql aws-appsync
阅读 Amazon DynamoDB 文档,我仍然无法理解将它用于最常见任务的最佳方式是什么 - 拥有多种类型的文档(例如,“用户”、“事件”、“新闻”),所有文档都具有唯一的 ID . 据我了解,由于 DynamoDB 仅暗示对文档主键的限制,我们可以在其中存储任何具有主键的数据。因此,最自然的解决方案看起来像:
- partion key 'type' is document type - 'user', 'event' etc
- sort key is uuid
Run Code Online (Sandbox Code Playgroud)
但这与官方文档相矛盾,根据它,更好的是:
- partition key 'id' is just uuid
- sort key is type - 'user', 'event'
Run Code Online (Sandbox Code Playgroud)
但由于关键名称,这与常识相矛盾。最后,我们可以为用户、事件和新闻创建 3 个不同的 DynamoDB 实例,所有实例都使用 uuid 作为分区键,没有排序键。哪种解决方案是 DynamoDB 使用的最佳或常见做法?
我是NoSql和DynamoDb的新手,但是来自RDBMS ..我的表正从MySql移动到DynamoDb.我有表:
customer(列:cid [PK],名称,联系人)
硬件(列:hid [PK],名称,类型)
租(列:rid [PK],cid,hid,time).=>这是客户与硬件项的关联.
一个客户可以拥有许多硬件项,一个硬件项可以在许多客户之间共享.
要求:单独的客户列表和hadware项目应该能够检索.
租赁细节 - 哪个客户借用哪个Hardeware Item.
我提到了这个 - 二级索引表.这是关于将所有列保留在一个表中.
我想有2个DynamoDb表:
Customer - 它具有类似于列和一组硬件项哈希键的所有属性.(然后我的问题是,当查询客户表以仅检索客户时,也会加载所有硬件密钥.)
请问表格结构的任何指导?如何保存,加载甚至更新?
请问任何java样本?(找不到任何类似于我的场景的有用资源)
该DynamoDB文档描述表分区是如何工作的原则,但其对细节(如数字)很轻。DynamoDB表分区究竟如何以及何时进行的?