為什麼企業依賴於 NoSQL

来源:https://www.cnblogs.com/TFengStorm/archive/2019/01/15/10272084.html
-Advertisement-
Play Games

如果你關註大數據科技動向,你對 NoSQL 一定不陌生,NoSQL 是一個分散式資料庫。在過去時間,數據存儲一直關係型資料庫天下,有著良好的控制併發操作、事務功能。雖然RDBMS很優秀,但是隨著時間的推移就出現了兩個關係資料庫解決不了的問題:快速增長的數據規模和日漸複雜的數據模型。結果,我們看到了 ...


如果你關註大數據科技動向,你對 NoSQL 一定不陌生,NoSQL 是一個分散式資料庫。在過去時間,數據存儲一直關係型資料庫天下,有著良好的控制併發操作、事務功能。雖然RDBMS很優秀,但是隨著時間的推移就出現了兩個關係資料庫解決不了的問題:快速增長的數據規模和日漸複雜的數據模型。結果,我們看到了 NoSQL 資料庫的興起。

一、關係資料庫不足

實際上,從 1979 年 Oracle 發佈了第一個版本,這些資料庫被設計為在單個伺服器上運行,並且越大越好。而且增加這些資料庫容量的唯一方法是升級伺服器處理器、記憶體和存儲,數據存儲代價不斷升高。隨著互聯網的數據呈指數級增長和 Web 應用程式的興起,數據模型日漸複雜,關係資料庫難以支撐,NoSQL 資料庫也由此孕育而生。在 2006 年谷歌發佈了 Bigtable 研究論文,在 2007 年亞馬遜發佈了 Dynamo 研究論文。而這些新的資料庫旨在滿足新一代企業要求:需要敏捷開發並支持任意規模運作。

二、敏捷開發

當今是以體驗為中心的數字經濟,企業如何保持競爭力,那麼必須進行創新。由於這項創新的核心是現代 Web、移動和物聯網應用程式的開發,因此開發人員必須高頻提供應用程式和服務。速度和敏捷性都至關重要,因為這些應用程式的發展速度遠遠超過 ERP 等傳統應用程式。而關係資料庫是卻不能很好滿足於它,因為它們的固定數據模型不能很好地支持敏捷開發。

敏捷開發的核心原則是適應不斷變化的應用程式需求:當需求發生變化時,數據模型也會發生變化,這是關係資料庫的難以剋服的問題,因為關係資料庫的模型是固定的,並預先定義好的。因此,當要更改數據模型,開發人員不得不修改當初設定好的資料庫結構,以適應新的需求。這會減慢或停止開發,不僅因為它是一個手動,耗時的過程,而且還會影響其他應用程式和服務。

相比之下,NoSQL 文檔 資料庫完全完美支持這點,因為它是無模式的,沒有強制定義數據必須建模。相反,它遵循應用程式和服務。使用 NoSQL,數據模型由應用程式模型定義。應用程式和服務將數據建模作為對象。

三、如何支持任意規模運作

為了支持以指數增長的用戶和數據 - 數百到數千到數百萬用戶,以及千兆位元組到數TB的數據操作,應用程式和服務不得不進行擴展以保持性能,並且必須有效地運行。

對於擴展關係資料庫而言,這是一個問題,例如,使用 Oracle ,使用 RAC 技術進行擴展就需要大量組件,昂貴且不完全可靠。因此,有效擴展和按需擴展的能力是一項挑戰。它會變得越來越昂貴,因為必須購買更大更強的伺服器以容納更多用戶和更多數據。此外,如果必須使資料庫離線以執行硬體升級,則可能導致停機。

然而,分散式 NoSQL 資料庫利用廉價硬體進行擴展, 只需添加更多伺服器即可添加更多資源。擴展能力使企業能夠通過以下方式更有效地擴展:

1、不需要為滿足部署而買相對稱的硬體

2、利用較便宜的硬體進行拓展;

3、按需擴展,無需停機。

四、NoSQL 常見存儲方式

NoSQL 常見有三種存儲方式:鍵值存儲、面向文檔的資料庫和麵向列的資料庫。接下來說明這幾種存儲方式以及資料庫代表。

鍵值存儲

代表:Redis、memcached

鍵值存儲是 NoSQL 最常見存儲方式,通過 key-value 形式保存數據,高速訪問數據。而且根據保存時效也分為臨時性、永久性和兩者兼備。

面向文檔的資料庫

代表:MongoDB、CouchDB

面向文檔的資料庫數據結構要求不是很嚴格,不定義表結構而且可以使用複雜的查詢條件

面向列的資料庫

代表:HBase

面向列的資料庫以列為單位進行存儲,這裡的列式存儲其實說的是列族存儲,它將數據表存儲為數據列而非行的形式。列族存儲優勢:快速查詢,易拓展,但功能相對局限。

五、NoSQL 對於事務的支持?

在這裡有一個誤區,由於分散式事務需要分散式協作,所以似乎必須在性能可擴展性和分散式事務支持之間進行權衡。

耶魯大學的一名副教授 Daniel Abadi 認為這個想法是錯的,可拓展的分散式系統也是可以實現事物。他提出了一個新的權衡策略,具體是在公平性、隔離性和吞吐量(FIT)三者之間進行取捨。
換句話說,有兩種方法構建出具備分散式事務吞吐量的可擴展系統:

1、放棄隔離性

當放棄隔離性,一個事物是不會跟其他事物有衝突,就無需等待協作就可以完成了。而且也有一類數據約束可以確保在弱隔離下正確性。

2、放棄公平性

通過設定分散式協作的順序最小化兩者之間的時間重疊,從而減輕二者之間的相互影響,在此公平下找到最合適時間進行協作。

六、小結

構建和運行這些大規模互動式應用程式創建了一組新的技術要求。新的技術架構需要比以往更加靈活,並且需要一種能夠適應前所未有的規模、速度和數據可變性的實時數據管理方法。關係資料庫無法滿足這些新要求,這就使得 NoSQL 逐漸流行起來。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 通過yum等軟體倉庫都可以直接安裝RabbitMQ,但版本一般都較為保守。 RabbitMQ官網提供了新版的rpm包(http://www.rabbitmq.com/download.html),但是安裝的時候會提示需要erlang版本>=19.3,然而預設yum倉庫中的版本較低。 其實Rabbit ...
  • 在下載文件時,如果遇到重覆文件,windows的預設做法時 文件名(數字) 這樣的方式重命名的。那麼我們在排除重覆文件時,可以使用 windows文件瀏覽器提供的查找功能, 用通配符 ~="(1)" 來將重覆的文件找出來,然後刪掉。 ...
  • 本文收錄在容器技術學習系列文章總目錄 1、限制容器的資源 預設情況下,容器沒有資源限制,可以使用主機內核調度程式允許的儘可能多的給定資源。Docker提供了控制容器可以使用多少記憶體或CPU的方法,設置docker run命令的運行時配置標誌。本篇提供有關何時應設置此類限制的詳細信息以及設置這些限制的 ...
  • 系統組成 版本XX.XX.XX XX主版本,XX副版本(奇數為測試版,偶數為穩定版),修訂版本號 , 表示修改的次數(debug) linux主流分支 硬碟分區 /dev/hda5 硬體設備所在分區 hd 表示IDE設備,sd表示SCSI設備 硬碟的順序號,以字母abcd...... 分區的順序號1 ...
  • 在tomcat下部署項目,第一次訪問成功。但是發現有一個頁面沒有成功載入,發現是部署時少了一些東西。也不想去找出具體少了什麼,直接把原來的項目移除,重新載入項目。重啟tomcat,這時驚喜來了。 重啟完tomcat,用瀏覽器訪問https://XXXXXXX:8443。結果是訪問請求被拒絕。 先看防 ...
  • 查看系統中shell的類型 cat /etc/shells 切換用戶使用的shell chsh s /bin/bash username sudo usermod s ...
  • 一、增加數據 普通的插入 查詢出來的數據可以作為數據添加到列表中 二、刪除數據 刪除部分數據 刪除表中全部的數據1,表的結構不變,但不刪除表的自增主鍵 刪除表中全部的數據2,表的結構不變。刪除表的自增主鍵 還有一種刪除表中全部內容的方法,它不像delete那樣還要逐條看看再刪,而是直接清空掉,可以聯 ...
  • SELECT a.tb_name 表空間名稱, c.contents 類型, c.extent_management 區管理, b.total / 1024 / 1024 表空間大小m, (b.total - a.free_sp) / 1024 / 1024 已使用m, a.free_sp / 10 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...