我想寫一個高度可擴展的Web應用程序來銷售活動門票。我想使用NoSQL數據庫,如Big Table或MongoDB和Cloud Service(如Google App Engine(GAE)或Amazon Elastic Compute Cloud(Amazon EC2))NoSQL是否適合銷售門票Web應用程序?
使用這種類型的數據庫確保兩個客戶端無法同時購買同一地點的門票?或者可能我將不得不使用RDBMS數據庫並忘記Google App Engine?
我想寫一個高度可擴展的Web應用程序來銷售活動門票。我想使用NoSQL數據庫,如Big Table或MongoDB和Cloud Service(如Google App Engine(GAE)或Amazon Elastic Compute Cloud(Amazon EC2))NoSQL是否適合銷售門票Web應用程序?
使用這種類型的數據庫確保兩個客戶端無法同時購買同一地點的門票?或者可能我將不得不使用RDBMS數據庫並忘記Google App Engine?
我有這個問題的一個問題。並非所有的NoSQL數據庫都是平等創建的,不同的NoSQL數據庫有不同的數據存儲方式。一般來說,你應該擔心的是:數據實際上是寫入磁盤而不是寫入內存。大多數NoSQL數據庫都可以這樣做,但不是默認情況下。我們只是說這不是問題,您通常可以像MOngo或Cassandra一樣告訴數據庫將數據寫入磁盤,甚至可以知道至少有多少服務器應該寫入數據。
問題是您可能無法獲得真正的事務支持。當你處理電子商務時,重要的是要有全部或者全部類型的轉換,其中幾個操作要麼完全成功,要麼回滾。絕對不可能只保存部分數據。例如,如果您需要將數據寫入多個表(採用NoSQL語言的集合或文檔),如果服務器在進程中間停機並且數據只寫入一個表中,這在電子商務中通常是不可接受的。
我不熟悉所有的NoSQL數據庫,但我知道的那些數據庫還沒有這個選項。另一方面,MySQL也是如此。
如果事務性支持或缺乏它並沒有打擾您,那麼我認爲只要您告訴它將數據保存到磁盤而不只是存入內存,就可以使用NoSQL。
比如像GAE的數據存儲仍然可以支持事務語義,例如:
http://code.google.com/appengine/docs/python/datastore/transactions.html
所以,是的,這是可以做到的你正在尋找做什麼。 (注意:GAE的Datastore並不完全是NoSQL,因爲它使用類似SQL的查詢。)
使用諸如get_or_insert之類的東西,您可以輕鬆確保兩個客戶端在Google App Engine上沒有同時收到相同的資源。但是,GAE和RDBMS之間存在很大差異,因此在做出決定之前,確保您進一步研究它們。
答案是'也許'。
取決於你想建立什麼,你很多可以使用的一些技巧在這篇文章: http://kylebanker.com/blog/2010/06/07/mongodb-inventory-transactions/