首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >办公时间的DynamoDB表设计

办公时间的DynamoDB表设计
EN

Stack Overflow用户
提问于 2020-04-23 10:17:21
回答 1查看 161关注 0票数 1

我正在尝试使用DynamoDB创建一个营业时间应用程序。

我看到了很多针对不同数据库的示例和模式设计,但都找不到适合DynamoDB的表设计。

以下是我的需求

  1. 每一家企业都应有默认工作时间(星期一08:00 - 14:00、16:00 - 20:00)和特别活动(2020年11月26日商店因感恩节关闭/营业时间为10:00-14:00)。
  2. 每天可以有多个工作时间(08:00-14:00,16:00 - 20:00)

这些是我需要允许的操作

  1. 为每个企业创建/编辑工作时间(包括特别活动)
  2. 通过提供业务ids列表,检查企业(或业务列表)现在是否处于打开状态。
  3. 通过提供每个id的业务id和日期范围,获得两个日期(例如23/04/2020 - 25/04/2020)之间的营业时间(或业务列表)。

我试过的是:

定义了一个表,其中业务id是partition key (HASH),而特殊日期/星期是sort key (RANGE)。

这种方法的问题是,除非我使用scan api,否则我无法按多个业务时间进行查询,这是不推荐的,因为操作成本很高。

请建议我在这个应用程序中应该使用什么样的表格设计。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-23 11:36:41

您可能首先需要在DynamoDB之外构建您的总体逻辑,确定业务是否工作,并且只对该逻辑的子集使用Dynamo中的采石场。

尽管我们使用DynamoDB查询正常工作时间,并且不包括假期和特殊情况之类的逻辑,但您可以在访问Dynamo之后使用它进行筛选。您不能在Dynamo中构造一个查询来回答您的所有问题,这些问题更像您在SQL中可以做的事情。

因此,假设我们有一个与正常工作日相关的表/子集。所以你有这样的东西:

分区键(PK):business,Range键(RK):dayOfWeek,和attributes,opens & closes

然后我们可以创建2个GSI:

  • PK dayOfWeek RK opens
  • PK dayOfWeek RK closes

现在,如果商店在周一下午3时至4时开放,我们可以执行两次查询:

  • PK ==星期一&营业时间:下午2点
  • PK ==星期一及下午四时关闭

并只收集两个查询中出现的值。

显然,有一个PK的一天,可能不是一个好主意,因为你将只有7个分区。那么你是做什么的?嗯,您的查询中可能有比简单的一天更多的条件,例如商店的类型,商店所在的城市,等等。这意味着您将有一个类似于:city-category-dayOfWeek的PK。

类似地,在排序方面,您可能希望将级别较高的存储作为第一个选项,因此您可能有类似于:{rating}-{open} & {rating}-{closes}的内容。

在设计表格之前,首先要先布局所有的查询,这样你就得有创意了。我真的很喜欢桌面设计的视频,太棒了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61384746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档