我不确定这是否是问这个问题的正确地方。
我是dynamodb的新手,正在尝试找出创建小型Web应用程序的出路。我已经在http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/BestPractices.html
中阅读了最佳做法我的表格将是:
我目前设计架构的方法如下:
// Tables
// PK: Building Id, SK: name
- Building ID : {
name: <Building Name>
Tenants: [
{ TenantId: { Receipients: [{Receipient Id 1, Receipient Id 2...}] }
]
}
// PK: Courier Id, SK: createdAt
- CourierId : {
name: <Courier name>
...
}
//PK: Not Sure, SK: Not Sure <-- This is where I messed up, looks relational, defeats the purpose?
- Deliveries: {
receipient id: Courier id
}
为了列出所有交货以及收件人的详细信息,我需要按收件人ID来获取收件人的详细信息。根据{{3}}文档,这将意味着在Building表中将收件人ID作为排序键。
由于您只能使用表格的顶层元素(收件人不是该元素),因此按照准则LSI
似乎不可能索引键属性可以包含基表中的任何顶级String,Number或Binary属性;其他标量类型,文档类型和集合类型是不允许的。
因此,我不希望在不创建另一个表的情况下实现此目的,我应该在该表中复制所有收件人,并更新它们,使表中发生的所有更新都发生。还有其他替代或更好的方法吗?
由于交付似乎是快递员与收件人的一对一关系,是否可以保留ID并遍历所有收件人,并在列出所有交付项时进行快递?
答案 0 :(得分:0)
DynamoDB可能不是满足您需求的最佳解决方案。据我了解,您有一个关系数据结构,主要在与交付有关的表中。 DynamoDB旨在保留主要由一两个键请求的非结构化数据。它并非旨在维护关系完整性或提供表联接。
我不知道您是否有云开发经验,但是使用云基础架构,每种数据结构可以拥有一个数据库。例如:
如果您扩大视图并结合使用多个资源,还有很多其他解决方案。