我正在尝试使用DynamoDB创建一个营业时间应用程序。
我看到了很多针对不同数据库的示例和模式设计,但都找不到适合DynamoDB的表设计。
以下是我的需求
这些是我需要允许的操作:
我试过的是:
定义了一个表,其中业务id是partition key (HASH),而特殊日期/星期是sort key (RANGE)。
这种方法的问题是,除非我使用scan api,否则我无法按多个业务时间进行查询,这是不推荐的,因为操作成本很高。
请建议我在这个应用程序中应该使用什么样的表格设计。
发布于 2020-04-23 11:36:41
您可能首先需要在DynamoDB之外构建您的总体逻辑,确定业务是否工作,并且只对该逻辑的子集使用Dynamo中的采石场。
尽管我们使用DynamoDB查询正常工作时间,并且不包括假期和特殊情况之类的逻辑,但您可以在访问Dynamo之后使用它进行筛选。您不能在Dynamo中构造一个查询来回答您的所有问题,这些问题更像您在SQL中可以做的事情。
因此,假设我们有一个与正常工作日相关的表/子集。所以你有这样的东西:
分区键(PK):business,Range键(RK):dayOfWeek,和attributes,opens & closes。
然后我们可以创建2个GSI:
dayOfWeek RK opensdayOfWeek RK closes现在,如果商店在周一下午3时至4时开放,我们可以执行两次查询:
并只收集两个查询中出现的值。
显然,有一个PK的一天,可能不是一个好主意,因为你将只有7个分区。那么你是做什么的?嗯,您的查询中可能有比简单的一天更多的条件,例如商店的类型,商店所在的城市,等等。这意味着您将有一个类似于:city-category-dayOfWeek的PK。
类似地,在排序方面,您可能希望将级别较高的存储作为第一个选项,因此您可能有类似于:{rating}-{open} & {rating}-{closes}的内容。
在设计表格之前,首先要先布局所有的查询,这样你就得有创意了。我真的很喜欢桌面设计的这视频,太棒了。
https://stackoverflow.com/questions/61384746
复制相似问题