2014-11-23 54 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