2014-11-23 49 views
1

我正在研究基本的餐厅预订系统,并且正在考虑为此项目使用Amazon DynamoDB。话虽如此,我甚至不确定DynamoDB是否适合这样的事情,或者我应该坚持使用MySQL RDS,因为某些查询可能相当复杂。预订系统适用于Amazon DynamoDB/NoSQL吗?

功能,我需要:

用户将提交一份“查找表”形式的日期,时间和聚会规模。

  1. 检查RESTAURANT表,如果日期和党的大小,甚至允许。
  2. 支票BLOCKED表格为封锁日期(节假日和其他关闭)
  3. 检查HOURS表确保餐厅是开放的。
  4. 基于聚会规模AND检查TABLEINFO表一表RESERVATION表,确保在同一时间的表并未预留给另一位客人比较

DynamoDB数据库设计任何建议或提示特别是hash & range用于这样的事情?

还是你认为MySQL数据库更适合这种类型的应用程序?

这是一个快速的数据库设计,让您更好地了解我正在尝试做什么。

Reservation Schema

+0

我认为关系数据库比NOSQL数据库更适合这种类型的应用程序。但是,我承认这是一个*意见*,这就是为什么我投票结束这个问题。 – 2014-11-24 00:14:09

回答

1

我已经做了很多关系数据库,并与NoSQL数据库(只是让你知道我来自)位。恕我直言,NoSQL数据库是最适合的场景,其中一个或多个为真:

  1. 的数据基本上是平的(没有很多关系,就像一个 旧的平面文件)
  2. 有一个明确的“父”型记录带有“子” 记录,这些记录足够小,足够频繁地与 父母一起访问,以证明它们正确地嵌入到记录中。
  3. 你需要 自由添加/填充合理的领域。我喜欢将它看作继承,其中表中的每个项目都共享一些共同的 特征(ID,名称),但不同的记录可能具有不同的 特征。例如,在线产品目录中可能包含书籍, 自行车和MP3歌曲。一个“书”项目的记录将有像国际标准书号,页数,作者等东西。一个“自行车”可能有 轮的大小和颜色,“MP3”将有长度,艺术家,流派, 等。您不会在 RDS的“项目”表中获得所有这些内容,而不会造成严重的重载或将字段留空。 A NoSQL数据库将允许您将所有信息存储在 表中,并仅用于需要它的项目。

您可以使用Dynamo的索引功能来确定构建包含您的问题的模式,但您会尝试使NoSQL数据库像RDS一样工作。

这就是说:我自己会尝试用Dynamo作为学习体验。 :)

+0

感谢您的回复和有价值的信息。到目前为止,该项目将基于MySQL,因为那样我们已经拥有了,但是在将来我会考虑将数据的一部分存储为NoSQL。对此有何看法?或许将关系部分作为关系数据库存储用户数据和预留数据为NoSQL?我不知道这是否合理,我想如果我直接在预订表中添加用户信息,我可以将其作为NoSQL存储,因为所有内容都将存储在该表中。 – WayBehind 2014-12-12 16:29:34

+0

DynamoDB与关系数据库相比功能少得多。它牺牲了可伸缩性的灵活性,因此如果您需要扩展,只有真正有意义。 DynamoDB旨在从10ms以下的任何查询中返回,即使您拥有数万亿条记录。 当基于SQL的解决方案不能削减这种情况时,即使DynamoDB介入,但您必须牺牲功能才能获得这种可伸缩性。 – bikeman868 2017-06-27 20:01:41

+0

我完全同意。实际上,当我向学生讲授数据库时,我通常会警告他们远离NoSQL解决方案。一旦你理解了为什么关系型数据库和规范化是必要的,你可以利用NoSQL在没有安全网的情况下抓住机会。 – 2017-06-29 14:15:51