MongoDB是不是正確的選擇? - simplethread
MongoDB和一般的文件資料庫解決了傳統關聯式資料庫的一些問題:
- 嚴格的模式 - 使用關聯式資料庫,如果你有動態形態的資料,你不得不建立一堆隨機的“雜項”資料列,將資料作為一個資料塊推送,或使用EAV設定...所有這些都有重要意義缺點。
- 難以擴充套件 - 使用關聯式資料庫,如果您的資料太大而無法輕鬆地將其放入一臺伺服器中,MongoDB內建了允許您跨多臺計算機擴充套件資料的機制。
- 困難的架構修改 - 沒有遷移!使用關聯式資料庫,更改資料庫的結構可能是一個巨大的挑戰(特別是一旦您的資料變得非常大)。MongoDB承諾使這一過程變得更加簡單。它使得它很容易上手,你可以繼續更新你的架構並快速移動。
- 寫效能 - MongoDB的效能很好,特別是在以某種方式配置時。MongoDB開箱即用的寫入配置,這是它受到批評的重大事件之一,它允許它提供一些令人印象深刻的效能數字。
MongoDB提供的潛在好處是巨大的,特別是對於面臨某些類問題的人。在沒有上下文或經驗的情況下閱讀上面的列表會讓你相信它在資料庫系統方面真正改變了遊戲規則。唯一的問題是上面列出的好處帶來了一些警告,其中一些我在下面列出:
- 沒有事務 - 事務是許多關聯式資料庫的核心特徵(不是,不是全部,而是大多數)。進行事務意味著您可以原子地執行多個操作,並且可以確保您的資料保持一致。當然,使用NoSQL資料庫,您可以在單個文件中擁有事務,或者您可以使用兩階段提交等策略來獲得類似事務的語義。但關鍵是你必須自己做這項工作......而且要做到正確,這可能是一項具有挑戰性和勞動力密集的工作。在您開始看到資料庫中的資料進入無效狀態之前,您通常不會意識到您放棄了多少,因為您無法保證操作的原子性。
- 失去關係完整性(外來鍵) - 如果你的資料有關係,那麼你就會有關係。幾乎所有資料都有某種關係,如果您的資料庫沒有強制執行,那麼您的應用程式將不得不這樣做。讓資料庫強制執行這些關係可以從應用程式中解除安裝大量工作,從而減輕工程師的工作量。
- 缺乏執行資料結構的能力 - 強有力的模式有時可能是一種痛苦,但它們也可以成為確保資料結構良好的強大機制。如果您恰當地利用它們,它提供了一種強大的機制來確保您的資料符合您期望的形狀。像MongoDB這樣的文件資料庫可以在模式周圍提供令人難以置信的靈活性,但這種靈活性可以將責任轉移到維護者身上,以保持資料的清潔。如果您沒有付出這些努力,那麼您最終會在應用程式中新增大量程式碼,以便考慮可能不符合您預期形狀的資料。正如我們經常喜歡在簡單執行緒中說的那樣...您的應用程式將在某一天被重寫,您的資料將永遠存在。
- 自定義查詢語言/工具生態系統的丟失 - SQL出現時是一場絕對的革命,從那以後沒有任何變化。SQL是一種非常強大的語言,但也可能具有挑戰性。必須使用由JSON片段組成的自定義查詢語言查詢資料庫,對於經驗豐富的SQL人員來說,這將被認為是一大步。有一整套工具可與SQL資料庫互操作。從IDE到報告工具的一切。遷移到不支援SQL的資料庫意味著您無法使用大多數這些工具,或者您必須找到一種方法將資料放入SQL資料庫以便可以使用這些工具,這可能比您認為。
許多參與MongoDB的開發人員並沒有深入理解他們所做的權衡,而且他們常常將它作為應用程式的主要資料儲存區。這意味著這個決定通常是非常昂貴的。
未來幾年將有一些專案將MongoDB從其不適合的地方移除。如果這些組織中的許多組織花了一些時間來有條不紊地思考他們所做的技術選擇,那麼很可能他們中的許多人都沒有做出他們所做的決定。
那麼,您如何確定哪種技術對您的用例有意義?已經有一些嘗試建立用於評估技術的系統框架,例如“ 軟體組織中的技術引入框架 ”和“ 評估軟體技術的框架 ”,但我不認為它需要那麼複雜。
相關文章
- 為什麼說選擇正確的程式語言很重要,以及如何正確的選擇
- 為什麼說選擇正確的程式語言很重要 以及如何正確的選擇
- 選擇正確的 WebSphere 診斷工具Web
- 如何選擇正確的雲伺服器配置伺服器
- 如何正確選擇適合的CRM系統?
- 值得收藏!選擇正確BI工具的最佳指南
- 如何正確的停止MongoDB程式MongoDB
- 如何選擇正確的雲伺服器配置呢伺服器
- 如何選擇正確的Node框架:Next, Nuxt, Nest?框架UX
- 權威支援: 選擇正確的 WebSphere 診斷工具Web
- 如何正確選擇Web前端培訓機構Web前端
- 如何選擇正確的Node框架:Express,Koa還是Hapi?框架ExpressAPI
- 如何為微服務選擇正確的訊息佇列微服務佇列
- 【UX設計】如何為你的遊戲選擇正確的字型?UX遊戲
- 如何為你的應用選擇正確的盈利模式?模式
- PL/SQL 中如何正確選擇遊標型別SQL型別
- 選擇正確DevSecOps解決方案的七個技巧dev
- 設計表時,如何選擇正確的資料型別資料型別
- PHP 還是 ASP.NET:我做了正確選擇麼?PHPASP.NET
- 乾貨!企業正確選擇CRM系統的8種方法。
- 響應式設計:做出正確的選擇——資料資訊圖
- 利聯科技:如何正確的選擇適合自己的伺服器伺服器
- python 判斷輸入的是不是合法(正確)的ipPython
- 如何正確選擇ARM核心板、ARM工控板的儲存型別?型別
- 怎樣正確的去選擇蘋果企業簽名?看這裡!蘋果
- 正確選擇合適的移動應用測試工具很重要
- 如何選擇正確的讀取SD的資料表,提高程式效能
- MongoDB 分片鍵的選擇與案例MongoDB
- 如何選擇MongoDB片鍵?MongoDB
- MongoDB分片鍵選擇指南MongoDB
- Homestead 開啟mongodb正確姿勢MongoDB
- 觀察下面的選項,選出正確的選項。
- 演算法太多挑花眼?教你如何選擇正確的機器學習演算法演算法機器學習
- C#方法呼叫追溯:選擇正確的方式,輕鬆找到呼叫者C#
- 如何正確選擇iOS簽名,它們有什麼區別iOS
- MongoDB資料庫的兩種正確停庫方法MongoDB資料庫
- MongoDB Driver:使用正確的姿勢連線分片叢集MongoDB
- 不要和一種程式語言廝守終生:為工作正確選擇