天天看點

怎麼進行業務系統資料庫技術選型?

随着 雲計算 大資料 物聯網

時代的到來,越來越多的網民湧入網際網路,越來越多的應用系統需要支撐海量資料存儲,還需要随着業務需求滿足高并發、高可靠、高擴充性等要求,傳統的關系型資料庫已經不能完全滿足需求了,是以NoSQL應運而生。

那麼

SQL 是什麼?、 NoSQL 又是什麼? 業務系統如何資料庫技術選型呢? NoSQL!= NO SQL,而是NotOnlySQL,作為關系型資料庫的補充而出現。關系型資料庫即采用了關系模型來組織的資料庫,簡單來說,就是二維表格模型,包含關系(表名)、元組(二維表中的一行)、屬性(二維表中的一列)、域(屬性的取值範圍)、關鍵字(唯一能辨別元組的屬性)、關系模式(表結構,對關系的描述)等概念。以一個使用者資訊表來說,使用者資訊表就是整個關系,元組就是姓名、性别、年齡、電話、地域組成的一行記錄,屬性則是單獨的地域列、年齡列等,域就是地域是中國全省市等,關鍵字就是使用者ID、能唯一辨別這個使用者,關系模式就是這整個表,包含姓名、性别、年齡、電話、地域屬性。 https://s5.51cto.com/oss/202009/07/50f05929b7a07c844c69a6334e256b37.webp 對于關系型資料庫來說,一直非常流行的原因有如下四個:

  1. 強事務一緻性,資料庫的ACID(原子性、一緻性、隔離性、持久性)保障了所有記錄的資料全是準确的,對于早期網際網路來說,大家都不完全信任看不到摸不着的東西,是以這個特點非常重要;
  2. 容易了解,二維表的結構非常貼合現實世界。
  3. 使用友善,通用的sql語言使得操作關系型資料庫非常友善;
  4. 容易維護,在設計的時候采用了實體完整性、參照完整性等理念,減少了資料備援和資料不一緻。常用的關系型資料庫有Mysql、Oracle等。
然而随着網際網路海量資料的增加,關系型資料庫也産生了瓶頸,具體表現如下:
  • 無法應對高并發的讀寫請求,關系型資料庫是以行結構來存儲的,比如我們想擷取某個地域的使用者名單,需要按行讀取,再擷取其中的使用者名字這一屬性,對于磁盤的IO消耗非常大;
  • 無法彈性伸縮,關系型資料庫無法像webserver那樣簡單的通過增加更多的硬體和服務節點來擴充性能,對于資料庫海量劇增的今天、服務需要24小時提供的企業來說,這非常難受;
  • 不再需要事務強一緻性、讀寫實時性,早期這是關系型資料庫的優點,而随着網際網路業務覆寫範圍的廣泛,使用者可以接受一定的延遲、一定的錯誤。
是以NoSQL關系型資料庫出現了,作為關系型資料庫的補充,再根據網際網路時代的需求不同,可以分為:
  • 支援高性能并發讀寫的Key-Value資料庫,如Redis;
  • 支援海量資料通路的文檔資料庫,如MongoDB、CouchDB;
  • 支援大資料存儲和分析的列式資料庫,如HBase;
  • 支援全文搜尋的搜尋引擎資料庫,如ElasticSearch。

資料庫的使用根據具體的業務場景而确定,毫無疑問,涉及交易場景,關系型資料庫是必不可失的,因為我們要求資料必須一緻,不能允許任何的差錯出現。在大部分網際網路企業中,一般是SQL與NoSQL配合使用。現以某高速發展的電商網站來聊聊如何技術選型?

從業務類型來看,電商具備使用者量&訂單量高速增長、網站延遲低、對部分資料準确性要求高的特點,是以需要資料庫能支援高讀寫的并發量、低延遲高吞吐、安全穩定、高可用的特點。從資料類型來看,包含使用者個人資訊資料、商品資訊資料、交易資料三類,對于交易資料需要保證不能出錯,而其它類資料則要求能存儲不出錯。從資料驅動營運的角度來看,未來會利用使用者在平台産生的所有資料進行資料分析、智能推薦、二次營銷等。綜上所述,我們選擇的資料庫是MySQL與MongoDB。

選擇MySQL毫無疑問是為了保證業務核心資料如使用者資訊、交易資料等不能出錯,這是關系型資料庫的最大優勢。選擇MongoDB則是因為其高可用、文檔模型的特點。關于高可用,首先MongoDB的架構是primary、secondary模式,一個主節點接受server的讀寫,兩個從節點同步primary主節點的資料,當主節點發生故障時,從節點進行選舉,産生新的主節點,進而保障了業務的高可用。

其次MongoDB支援資料分片,當業務量急速擴充時,原先部署資料庫的五台伺服器就不夠了,現在需要增加伺服器節點數,對于Mysql來說,采用分庫分表就可以解決問題,對于MongoDB則是通過将一個集合上的資料按片鍵分到不同的分片上,減少同一個資料檔案上的資料量,再通過配置檔案将資料引向不同的分片即可。.

怎麼進行業務系統資料庫技術選型?

最後MongoDB支援文檔模型,可以根據業務資料類型的變化來去增加或删減字段,而不需要按照确定的表結構去增加删除。比如在Mysql中,當一個使用者填寫了家裡的收貨位址、公司收貨位址、朋友收貨位址等多個位址時,需要建立聯系人表、位址表将其關聯,而在MongoDB中隻需要一個集合就可以搞定了。

怎麼進行業務系統資料庫技術選型?

在資料庫選型我們都需要考慮資料量、并發量、實時性、一緻性、讀寫分布、資料類型、安全性、運維成本都名額,常見的系統資料庫選型如下所示:

現在假設你在主導或參與一個系統的開發,相信你已經非常清楚如何選型資料庫、如何應對後續出現的問題了吧?知其然知其是以然~

雲伺服器ECS位址:阿裡雲·雲小站