在互聯網中關係型資料庫是否不再那麼重要

来源:https://www.cnblogs.com/yulinfeng/archive/2019/04/22/10747920.html
-Advertisement-
Play Games

關鍵詞:互聯網、關係型資料庫 強調互聯網,這是因為本文所討論的前提是互聯網應用。與“傳統”應用不同,互聯網中的應用每天面臨的是海量的數據、大量的請求以及對系統可靠性和響應速度有著更高的要求。“傳統”應用,我姑且淺顯地認為是,數據量不大,面對的用戶群範圍相對較小,自然大量的高併發請求場景幾乎不存在。 ...


關鍵詞:互聯網關係型資料庫 

  強調互聯網,這是因為本文所討論的前提是互聯網應用。與“傳統”應用不同,互聯網中的應用每天面臨的是海量的數據、大量的請求以及對系統可靠性和響應速度有著更高的要求。“傳統”應用,我姑且淺顯地認為是,數據量不大,面對的用戶群範圍相對較小,自然大量的高併發請求場景幾乎不存在。 

  在上文對互聯網應用和傳統應用有了一個大概的認識後,接下來我們來談一談,本文的主題關係型資料庫在兩種類型應用的不同使用方式,以及關係型數據在如今的互聯網應用中是否不再是關註的焦點。 

  首先,海量的數據。百萬級甚至千萬級億級的數據已不可能存儲在單一的數據表中,甚至不可能存儲在一個資料庫中。試想如果將所有的數據存儲在單庫單表中,一旦發生全表掃描,這對於系統響應速度來講將是一個災難。然而在傳統應用中,可能單庫單表已經足以適用。 

  第二,由於產生了海量數據,進而數據在磁碟上的存儲被設計成了“分庫分表”的模式,利用某種特定的“路由”演算法,定位一個數據所處的位置。正是因為“分庫分表”的設計,使得關係型數據中的“聯表查詢”場景失效,所以在互聯網應用中,一張表的設計已經幾乎不再有“外鍵”,也就是聯表查詢幾乎已消失。 

  第三,大量的請求。這在互聯網應用中比較常見,一起突發事件,一個明星的突發新聞,都會造成大量的請求瞬時到達。資料庫的承載能力是有限的,一旦所有的訪問量在某一時刻同時涌入,這直接會造成資料庫宕機,整個系統甚至會因為資料庫的原因造成服務不可用。所以在如今的互聯網應用中,對數據的讀取寫入幾乎已經不再直接操作資料庫,而是在資料庫前加入了一道“安全”屏障——緩存。 

  第四,服務的可靠性。服務的可靠性,即使系統出現問題,也要保證部分可用,讀寫分離是一個很好的解決方案,讀取和寫入操作不再同一個資料庫中進行,而是將他們分開。如果此時有大量寫操作,要儘量不影響讀操作,或者如果如果在寫入資料庫時造成資料庫宕機,此時要儘量不能影響資料庫的讀操作。此時在互聯網應用中通常就會部署一套“主從”資料庫,主庫寫,從庫讀,這就會衍生出數據同步的問題,或者歸納為數據一致性問題。 

  可以看到,互聯網應用與傳統應用的異同點在於,互聯網應用對於資料庫的著重點在於從整體上進行把握,對數據的操作相對來說比較“粗糙”。而傳統應用由於其自身原因,只需要考慮更為“精細化”的操作,例如連表查詢,表與表的關係,關係表還是實體表等等。 

  這是否意味著,在互聯網中關係型資料庫已經不再那麼重要了呢?那些課本上的第一範式、第二範式已經過時了呢? 

  如果認為互聯網中關係型資料庫不再強調“精細化”的操作,就是已經過時了,這是一葉障目不見泰山。再總結一下,在互聯網中,對於關係型資料庫,我們需要設計分庫分表、主從庫、讀寫分離、熱點數據緩存等等。在傳統應用中,對於關係型資料庫,我們需要設計出E-R圖,需要設計主鍵、外鍵,需要寫聯表查詢的SQL語句等等。 

  再回顧一下,我們在大學的資料庫課程中,在學習資料庫時,是否是從第一範式、第二範式開始的?再逐步練習“一個學生學習了哪幾門課程”、“一個學生每個課程的分數”、“某門課程按80分、90分以上分類”這類的SQL語句,因為這是基礎,這是原理。 

  那麼回到本文的主題“在互聯網中關係型資料庫是否不再那麼重要”,筆者的觀點是,側重點不同,互聯網應用的很大,有的很大很大,有時需要你放棄遵循某些範式,從其他方面去彌補,而從整體上去思考如何進行數據建模,互聯網應用更加考驗的是“能力”,對數據建模的能力,如何構建更高的可靠性應用。傳統應用,更加考驗的是一切按照規矩來,“精細化”的操作,對SQL語句的熟悉程度就意味著對資料庫的熟悉程度。 

  但就算是互聯網中,SQL語句並非是不重要的,不要因為自己處在互聯網,不熟悉SQL語句當做是一種“炫耀”,這是扎馬步式的基本功。最簡單的例子,如果不重要,像阿裡一樣的互聯網公司,照樣在研究關係型資料庫(參見:阿裡巴巴資料庫內核月報: http://mysql.taobao.org/monthly/)。 

  最後,《三體》一書中,智子鎖死了人類的基礎物理學,導致人類在科技面前完全停滯。 

 

 

這是一個能給程式員加buff的公眾號 


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

-Advertisement-
Play Games
更多相關文章
  • 對應Framework版本重新註冊 2.0:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i 4.0:C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_regi ...
  • 參考自:https://blog.csdn.net/whl632359961/article/details/73468115 https://www.cnblogs.com/ywl925/archive/2012/11/24/2786105.html 以下是自己做的該功能(發送簡訊、獲取簡訊餘額條 ...
  • 第一種 簡單尋路 地面接觸到的。到達目標點不用跳躍能夠一直走路到達。場景視圖中簡單搭設幾個物體。膠囊體為尋路者,黃球為目標點 紅地板,綠色障礙物。現將地板以及障礙物選中 在檢視面板設置靜態為Navigation Static 如圖2然後菜單欄選擇視窗 Window –Navigation然後選擇Al ...
  • 最近將自己負責的一個核心介面系統從.Net Framework遷移到了.Net Core。 整體過程,從業務層面說一般般吧(整體還好但還是搞的業務有感,沒出嚴重故障)但是技術層面上感覺其實並沒有達到要求,不過預期也是應該不會那麼順利,接下來可能還需要幾個小Fix來處理各種奇奇怪怪的問題。 回顧下遷移 ...
  • Escape: 複製代碼 代碼如下: public static string Escape(string str) { StringBuilder sb = new StringBuilder(); foreach (char c in str) { sb.Append((Char.IsLette ...
  • 項目需求(Winform)可以批量列印某個模板,經過百度和摸索,使用iTextSharp+ZXing.Net+FreeSpire.PDF三個類庫實現了生成pdf、生成條形碼和列印pdf功能。 首先在項目作用使用NuGet獲取這三個類庫的引用。 其次把C:\Windows\Fonts裡面的微軟雅黑字體 ...
  • 近期一直在學習Asp.net Core,微軟的文檔太難看,都是英文翻譯過來的,很不友好,感謝這個博客,從壹開始前後端分離【 .NET Core2.0 +Vue2.0 】,讓我入門了,剛學到這個Swagger時,我就有個需求,因為我之前寫過的系統是分了不同的模塊,模塊裡面再分控制器,不同模塊經常會有相 ...
  • 在用C#調用介面的時候,遇到需要通過調用登錄介面才能調用其他的介面,因為在其他的介面需要在登錄的狀態下保存Cookie值才能有許可權調用, 所以首先需要通過調用登錄介面來保存cookie值,再進行其他介面的調用 1.通過Get方式 但是並不是所有的get請求都需要添加這個heard的內容,有些加了這個 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...