2010-07-20 70 views
44

我知道這是一個很大的問題,它不是一個答案,也不是答案,但我們開發Web應用程序並正在研究如何使用MongoDB來實現我們的持久性解決方案。將MongoDB與NoRM結合用於對象存儲。從SQL服務器遷移到MongoDB的原因

我想問的是您從SQL切換到mongo時遇到的問題?什麼時候mongo根本就不是正確的解決方案,並且mongodb的優勢足以將開發從SQL中移走?

回答

35

在我看來,選擇存儲後端時,數據的格式應該是主要關心的問題。你有關係性質的數據嗎?如果是這樣,是否可以,並且在文檔中建模數據是一個好主意?數據建模在文檔數據庫中與在關係數據庫中一樣重要,它的做法不同。你有多少種類型的物體,它們有什麼關係? Mongodb中的DBrefs可以做的伎倆,或者你會錯過外鍵太多,這將是痛苦的?數據的訪問模式是什麼?你只是提取一個字段值過濾的數據類型,或者你有錯綜複雜的提取模式?

您是否需要ACID事務完整性?該域對數據執行了很多限制嗎?您是否需要文檔數據庫的可伸縮性因素還是僅僅是一件「酷」的事情?

什麼是您的一致性和數據完整性要求?一些NoSQL解決方案和MongoDB在寫入一致性方面相當寬鬆,以獲得性能。 NoSQL沒有統一的格局和其他產品,例如CouchDB在這個部門有其他特點。有些也是可調的。

這些都是應該進入存儲選擇的問題。

幾點體會

  • 做存儲的數據廣泛的報告可以使用MongoDB的或任何文件數據庫時,有些用例已經合併爲目的的RDBMS和文件-DB更難。
  • (Very)不同的查詢模型。 MongoDB也不同於其他文檔。
  • 靈活的開發
  • 未知的領域
  • 的驅動程序不同成熟度的過程中更改數據格式/模式和框架
  • 快速
  • 簡單(在很多方面)的產品和管理工具(相對於很多RDBMS產品)
  • 沒有更多的阻抗不匹配。存儲符合數據,而不是相反。
  • 減少摩擦,更直接地訪問數據。
  • 域與持久性關係更大(取決於NoRM的ORM「級別」,它取決於後端的抽象程度,我沒有使用NoRM,所以我不能回答這個問題。)
+0

你可以做存儲過程與MongoDb和人們使用此功能:http://www.mattinsler.com/why-and-how-i-replaced-amazon-sqs-with-mongodb/ – TTT 2010-07-20 09:04:11

+1

@TTT。你是對的。現在編輯出來。 – 2010-07-20 09:11:57

5

我幾天來一直在嘲笑它。這就是我能說一下:

FOR:

  • 沒有更多的SQL語句
  • 您的數據庫就像你的類不是周圍的其他方法
  • 你的「模式」是比較靈活
  • 體重秤很好
  • 很容易上手
  • <意見>很酷</opi信聯盟>

反對:

  • 目前,我想要實現我的蒙戈應用程序,但不知我的會員卡用戶類有NULL字段,當我嘗試從檢索自定義成員資格提供程序和角色提供蒙戈。
  • 某處我已經閱讀了關於C#驅動程序,它相對年輕但穩定,所以期待一些變化。 (雖然這不會阻止我)

一兩件事我注意到這是一個從教程丟失: 初始化你的對象裏面你的清單,否則在試圖對.save(yourobj),它會拋出一個錯誤。最安全的做法是在你的類中編寫一個構造函數,確保你的對象中沒有任何NULL對象。這樣,如果你忘記了某些東西,你將不會得到一個錯誤。

+0

+1。我一直在我的POCO列表中掙扎一段時間,謝謝讓我知道它應該如何工作。沒想到在這裏找到答案:) – Mickel 2010-12-26 19:22:08

+3

我寫了一堆MongoDB的ASP.NET提供程序,你可以使用:https://github.com/freshlogic/MongoDB.Web – 2011-09-11 15:21:18

2

在這個Getting started with NoSQL中,您可能會發現使用NoSQL數據庫(包括MongoDB)的一些優缺點。一個簡短的總結將是:一個不同的數據模型(想象一下,如果需要從對象模型到「這個新模型」的映射,它是否會運行良好),一個不同的查詢模型(儘管與其他模型相比,MongoDB查詢具有相當的能力) ,沒有交易(儘管你有一些原子操作)。

無論如何,從我的角度來看,最重要的變化是數據模型以及您使用這種新方法設計應用程序的方式。

7

利弊

  1. (缺乏上/不同的看法) 耐久性(讀 http://www.mikealrogers.com/2010/07/mongodb-performance-durability
  2. 沒有交易
  3. 沒有約束
  4. 聚合,MapReduce的是緩慢的,你需要編寫類似羣組的代碼 - 通過
  5. 報告更難,德veloper定義了關係,而且業務分析師不能建立自己的查詢,他們不能例如做一個「減」(「除了」在SQL Server中的行話)

利弊

  1. 可以很容易地添加新的「列」和「表格」
  2. 速度
  3. 分片(靜止測試版)
  4. 文件更緊密地匹配到對象比設定關係表,以便映射變得容易
  5. 它開闊思路
5

Graph comparing speed to update records

您的里程可能會有所不同,但是這是一個快速圖我放在一起進行比較更新多個「錶行」(MongoDB中的非層級扁平文件)的速度有和沒有索引給我們一個想法,它將如何擴展我們的應用程序。

+0

此圖來自哪裏? – BanksySan 2016-02-01 17:13:41

+0

我個人在我的開發機器上進行的實驗......前一段時間,現在已被授予。 – GroovyCakes 2016-02-23 23:06:16