我有一个DynnamoDB/NoSQL/MongoDB问题。我来自一个RDBMS后台,正在努力为NoSQL DB设计一个正确的设计。如果有人能帮助我的话!
我有以下对象(用我的术语来说就是表):
- 编辑
- 使用者
- 课程
- 单位
我需要以下接入点,其中大多数都是可以实现的:
- 获取/创建/更新和删除组织
- 获取/创建/更新和删除用户
- 获取/创建/更新和删除课程
我能做到。
问题是Users和Courses对象有多种检索数据的方法:
- 电子邮件
- 使用者名称
例如:列出课程上用户
- 列出组织的用户
- 列出组织的课程
- 列出组织中的用户
- 列出单位中用户
所有这些用户二级索引,我对它们有一点了解,但我有三级索引,但那可能是我的设计。
我来自关系方法论,对报告不太确定,如果我想搜索课程下尚未完成的所有用户(称之为状态标记),它将如何工作?
据我所知,我需要索引的everting我想搜索?
AWS DynamoDB是我的首选,但我也很乐意考虑另一种NoSQL。我意识到我需要更多关于NoSQL的教育,所以如果有人能提供好的文档和例子来帮助学习过程,那将是非常棒的。
此致
理查德德
我已经看了几个UDEMY视频,并一直Gooling了很多个星期(哦,并在这里检查“显然”)
1条答案
按热度按时间ffvjumwh1#
注意事项
分区
在DynamoDB中,所有的东西都被组织在分区中,这些分区为您提供了对元素的基于散列的访问。
单表设计
不要将数据拆分到多个表中,这会使一切变得更困难,实际上限制了数据库的功能。
钥匙
dynamo中的键必须围绕你的访问模式来设计。这是最难的部分。
你有 Partition Key(Hash Key)-〉这个键每次都必须被精确地指定。你不能在不知道PK的情况下执行查询。这就是为什么把时间戳之类的东西放在PK中是个坏主意。
属性名称
在NoSQL中,数据库迁移非常困难,所以你必须为属性使用通用名称,它们不应该有任何意义。
例如,“UserID”是分区键的错误名称,“PK”是分区键的正确名称,所有键都是如此。
索引
您有两种类型的索引:局部索引和全局索引。
回到你的问题上来,如果我们以其中的一个表为例-- Users
用户可以这样插入器(例如)
这样你就可以通过email和用户名来查询用户了。记住PK和SK必须是唯一的对。在这个例子中SK是免费的,可以用于其他访问模式(你没有提供)
另一种方法可能是复制数据
这样就避免了必须处理索引(有时索引可能很昂贵),但是必须手动保持用户数据的一致性。
更多阅读-〉https://www.alexdebrie.com/posts/dynamodb-single-table/