我对DynamoDB设计很新,并尝试为我的应用程序获取正确的架构。在这个应用程序中,不同的用户将输入关于他们的一天例如"用户X,3月1日12:00-2:00,累了" 。在给定时间内可能有多个条目,或重叠时间(例如,从12-2疲惫到12-1吃午餐)。
我需要根据用户和时间范围进行查询。常见问题:
我最初的想法是分区键是开始时间的用户ID和范围键,但由于重复的开始时间不对,它不能正常工作吗?
第二个想法:
操作 - 该开始时间的所有操作的JSON文档
[{action:" Lunch",endTime:" 1 pm"},{action:tired,endTime:" 2 pm"}]
< / LI>有关正确架构的任何建议吗?
答案 0 :(得分:1)
这并不是真的有一个解决方案。您需要根据您的使用情况评估多个选项,您拥有多少数据/查询频率以及哪些字段等。
但一个好的解决方案就是像这样对你的架构进行分区。
<强>优点强>
<强>缺点强>
这与您最初的想法非常接近,为了获得更准确的答案,我们需要更多关于您计划进行多少次写入和读取的信息,以及您需要什么样的查询。
答案 1 :(得分:1)
如果不是重叠活动的事实,那么UserID作为分区键是正确的,而StartTime作为rangeKey是明显的选择。
我会考虑选择
DynamoDB中的日期时间无论如何都只是存储为字符串。所以这里的想法是你有一个StartTime +一些uuid作为你的rangekey,它给你一个基于日期时间的可排序表,同时也保证你有唯一的主键。然后,您可以将StartTime存储在单独的属性中,或者具有从StartTime + uuid属性添加/删除uuid的功能。