對於這個特定的設計(調查),我應該使用 SQL 還是 NoSQL?
建構一個小型 Web 應用程序來創建帶有預設問題和響應列表的滿意度調查。該應用程序適用於一小部分人(最多 5,000 人),並在工作訂單完成時發送調查。
鑑於體積小且要求相對簡單,我想我可以使用 SQL 或 NoSQL 解決方案(我可以輕鬆訪問兩者)。
實體類型
- 調查模板(可能有 3 個)
- 問題(每個調查模板有多個問題)
- 問題類型(自由形式、特定選擇回答等)
- 調查回复(對特定調查模板上的問題的回复)
查詢/報告需求
顯示個人調查的回复
按某些方面顯示一系列調查的匯總回复
- 工單#(每個工單多個調查)
- 工單的日期範圍
- 執行工作的小組
變化/增長需求
調查模板、模板問題和可能的回答可能會在任何給定時間發生變化(由客戶決定並不斷發展)
- 可以想像在必要時創建一個新模板,但在適用的情況下不必這樣做會很好。
無需擔心儲存方面的增長。目前這是通過一個(設計糟糕的)Access DB 完成的,所以我們在這裡不談論任何主要內容。
其他需求
- 如果響應低於某個門檻值(例如 3 或低於 5),則結構應該能夠適應需要更多資訊/註釋
堆棧注意事項
- 這是在 Microsoft ASP.NET 堆棧(MVC4、WebAPI 等)上建構的
個人喜好/想法
我想使用 NoSQL 數據庫已經有一段時間了
我對 SQL 數據庫更熟悉,但對於這樣的事情,它似乎有很多架構和伺服器成本
RavenDB 和 CouchDB 都因此吸引了我
- Raven moreso 因為它建構得非常好,可以與 .NET 和通過 HTTP 一起使用,但我不確定許可是否可行。
- 也會考慮 MongoDB,但我認為直接 JSON 文件可能比 BSON 更容易使用
使用 NoSQL 解決方案(尤其是 RavenDB),在某種程度上我的對象成為我的模式,因為我將它們持久化到數據儲存中。我必須首先在 SQL Server 中建構該結構(除非我使用實體框架)。這會給 NoSQL 帶來優勢還是考慮到 EF 之類的東西?
對您的想法感興趣並提供任何有助於某人做出客觀決定的資訊。
由於規模龐大且不需要 100% 的 ACID 合規性,通常會實施 No-SQL 解決方案。通過 GFS、Hadoop、Mongo、Basho RIAK 等解決方案,將數據展平並對其進行非規範化以提高性能對於使我們達到今天的水平至關重要。
您的案例並沒有尖叫 No-SQL,如果您使用 MS SQL 伺服器可能會更好,因為您使用的是 ASP.NET 堆棧,並且 MS SQL Server 通過 CLR、powershell 為 ASP.NET 提供了很多功能(它也可以呼叫 .Net 對象)並且與 IIS 配合得非常好(我假設您也將在 IIS 上託管它)。這聽起來也像是您可以使用 SQL Server 2012 Express 從而節省許可成本。
MS SQL Server 還可以讓您輕鬆地“加入”跨非相關表的數據,以防您想出一個新想法,以及一個更難以實施的 No-SQL 解決方案。
但實際上,看看您的要求以及您將使用它的目的。你可以去任何一種方式。如果它讓您更樂於使用 No-SQL 解決方案並讓您的腳濕透,那就太棒了!去吧!最終結果可能無關緊要,但要嚴格回答這個問題,對於具有您描述的使用模式的 .Net 應用程序來說,這更好,我個人會選擇 SQL 2012 Express。
我很好奇看看別人怎麼想!
是的,您不需要 NoSQL 數據庫。正如前面的答案所說,你沒有規模問題。此外,您需要更豐富的查詢集。NoSQL 不提供非常豐富的查詢功能。如果您對數據庫模式進行規範化,則可以通過添加更多表來適當地滿足未來的需求。NoSQL 專注於在同一個表中擁有鬆散的模式(或任何與之等效的東西,如列族等)
如果您想嘗試 NoSQL 以獲得樂趣或學習它,您可以這樣做。你不需要強行將你的好奇心與你的要求結合起來。