2012-01-04 27 views
3

我正在尋找重寫基於本地(本地安裝)的應用程序(開具發票+庫存)作爲基於Web的Clojure應用程序的小企業客戶的VB。我打算將此作爲針對類似行業客戶的SaaS應用程序提供。SaaS應用程序的無模式/靈活ACID數據庫?

我正在查看數據庫選項:我的選擇是RDBMS:Postgresql/MySQL。第一年我可以擴展到400個用戶,每個用戶通常有20-40個頁面瀏覽量/每天 - 主要是針對不是靜態視圖的交易。每個視圖將涉及獲取數據和更新數據。遵守ACID是必要的(或者我認爲)。所以交易量並不大。

根據我的偏好選擇其中的任何一個都不是件容易的事,但對於這個我認爲是典型的SaaS應用程序的要求來說:Schema將隨着我添加更多的客戶/用戶併爲每個客戶不斷變化的業務需求(我將提供一些有限的靈活性,只是從開始)。由於我不是一個DB專家的基礎上,我能想到的,並已閱讀,我能處理,在許多方面:

  1. 有在MySQL/PostgreSQL中,傳統的RDBMS架構設計與單個DB託管多個租戶。並且在每張表中添加足夠多的「自由浮動」列以允許未來的更改,因爲我爲現有客戶添加更多客戶或更改。每次對Schema進行小的更改時,這可能會將更改傳播到數據庫。我記得讀過Postgresql架構更新可以在沒有鎖定的情況下實時完成。但不確定,在這個用例中它有多痛苦或多麼實用。而且,由於模式更改也可能引入新的/次要的SQL更改。
  2. 有一個RDBMS,但以靈活的方式設計數據庫模式:使用接近實體屬性值或只是作爲鍵值存儲。 (例如,Workday,FriendFeed)
  3. 將內存中的所有內容作爲對象定期存儲在日誌文件中(例如,edval,lmax)
  4. 轉到像MongoDB或Redis這樣的NoSQL數據庫。但基於我可以收集的內容,它們不適合這種使用情況,並且不完全符合ACID標準。
  5. 尋找一些像保留SQL和ACID兼容行爲的VoltDb或JustoneDb(基於雲)的NewSQL Dbs,並且是「新一代」RDBMS。
  6. 我看着的Neo4j(graphdb),但不能肯定是否適於該用例

在我的使用情況下,除了可擴展性和分佈式計算更多,我在看一個更好的辦法來實現「靈活的架構+ ACID +一些合理的性能「。我可以在網上找到的大多數文章都提到架構的靈活性是導致性能(對於NoSQL DB)和可擴展性的原因,同時忽略了ACID /事務方面。

這是「方案靈活性vs ACID」交易的「一個還是」的情況還是有更好的出路?

+0

在繼續之前閱讀[this SO answer](http://stackoverflow.com/a/8343142/562459)。 (你似乎缺乏關於多租戶數據庫的信息。) – 2012-01-05 03:53:06

+0

@Catcall:謝謝。我以前閱讀過MSDN文章。我正在看(請參閱我的觀點#1:共享數據庫,共享架構 - 在MSDN術語中)。我的問題更多的是我可以如何實現Schema靈活性(這是NoSQL的基礎),同時保持ACID保證(這是RDBMSs的基礎)? – tmbsundar 2012-01-05 04:21:19

回答