【云圖說】第235期 DDS讀寫兩步走 帶您領略只讀節點的風采
1145
2022-05-29
MySQL數據庫、postgresql數據庫、opengauss數據庫、Redis數據庫、MongoDB數據庫、influx數據庫…諸如此類,每次看到就有點頭大。除了經常會用到的mysql數據庫、redis數據庫,偶爾會接觸到的postgresql數據庫,別的數據庫只是略有耳聞。那么它們都是什么呢?哪些是關系型?那些是非關系型?哪些甚至不是這兩種類型呢?
本文會簡單介紹下這些形形色色的數據庫,對它們有個初步的理解。
MySQL數據庫 【sql】
MySQL數據庫是一個由瑞典MySQL AB公司開發,開放源碼的關系數據庫(具有關系型結構)管理系統。它是用C和C ++編寫的,并使用了多種編譯器進行測試,保證源代碼的可移植性,并未多種編程語言提供了API。
同時,mysql支持多線程,提供用于管理、檢查、優化數據庫操作的管理工具,使用標準的SQL數據語言形式。
使用原理:Mysql是由SQL接口,解析器,優化器,緩存,存儲引擎組成的;Mysql的存儲引擎是插件式的,是MySql中具體的與文件打交道的子系統,根據文件訪問層的一個抽象接口來定制的一種文件訪問機制。
MySQL數據庫的內部架構圖:
postgresql數據庫 【sql】
postgresql數據庫是一個開源的對象-關系數據庫服務器(ORDBMS),在靈活的BSD許可證下發行,支持 SQL(關系型)和 JSON(非關系型)查詢。它是一個多進程架構的高度穩定的數據庫管理系統,依托 20 多年的社區發展,造就了其高水平的故障恢復能力、完整性和正確性。
使用原理:PostgreSQL支持并行化,會包含3個重要的組件:leader進程(進程本身),gather節點 和 worker進程。
當PostgreSQL沒有開啟并行化的時候,leader進程自身處理所有的數據;而當決定某個查詢或查詢中部分可以使用并行的時候,就會在并行化部分添加一個gather節點,將gather節點作為子查詢樹的根節點,查詢則會從leader進程開始執行,并分配多個worker進程。
postgresql數據庫的體系架構圖:
opengauss數據庫 【sql】
openGauss是一款開源關系型數據庫管理系統,采用單進程多線程架構,并提供客戶端/服務器:客戶端可以使用JDBC/ODBC/Libpq/Psycopg等驅動程序,向openGauss的后端管理線程GaussMaster發起連接請求。openGauss支持如下基本功能:支持標準SQL,支持標準開發接口,支持混合存儲引擎、支持事務(ACID)。
使用原理:openGauss是單機系統,支持一主多備。業務數據存儲在單個物理節點上,數據訪問任務被推送到服務節點執行,通過服務器的高并發,實現對數據處理的快速響應。同時通過日志復制可以把數據復制到備機,提供數據的高可靠和讀擴展。
opengauss數據庫的邏輯架構圖:
注:基于openGauss,華為云打造了自研企業級分布式存儲服務GaussDB,兼容業界主流絕大部分的數據庫:
Redis數據庫 【NoSQL】
NoSQL(Not Only SQL)則不具有關系結構,意味著可以讓多臺計算機為我們完成工作以此提高系統的性能。
而Redis 是完全開源的,遵守 BSD 協議,一個高性能的 key-value 數據庫,是NoSQL結構的。Redis數據庫有以下三個特點:
Redis支持數據持久化,可以將內存中的數據(緩存)保存在磁盤(數據庫)中,重啟的時候就可以再次加載使用;
Redis不僅僅支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲,這些數據類型都支持push/pop(推進/彈出)、add/remove(添加/刪除)及取交集并集和差集及更豐富的操作
Redis支持數據的備份,即master-slave模式的數據備份。
Redis優勢在于:性能極高(讀寫速度很快);支持 Strings, Lists, Hashes, Sets 及 Ordered Sets數據類型;操作是原子性的。
使用原理:Redis是一個Key-Value類型的內存數據庫,整個數據庫統統加載都在內存當中進行操作,并且會定期通過異步操作把數據庫數據flush到硬盤上進行保存。因為是純內存操作,Redis的性能非常出色,每秒可以處理超過 10萬次讀寫操作,是已知性能最快的Key-Value DB。
Redis是單進程單線程的,利用隊列技術讓Redis數據庫變味了串行訪問,消除了傳統數據庫串行控制的開銷。
Redis數據庫的邏輯架構圖(有2個:客戶端和服務器端,可以都在一臺機器上或在兩臺機器上):
MongoDB數據庫 【存文檔型數據】
MongoDB是一個基于分布式文件存儲的數據庫(不是用來存結構化數據),由C++語言編寫,目的是為WEB應用提供可擴展的高性能數據存儲解決方案:網站實時數據處理、緩存、高伸縮性的場景。MongoDB是一個介于關系數據庫和非關系數據庫之間的產品。
MongoDB 將數據存儲為一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔類似于 JSON 對象。字段值可以包含其他文檔,數組及文檔數組。
使用原理:數據會被分組存儲在一個稱為集合(collection,類似于sql數據庫里的表) 的數據集中,每個集合在數據庫中都有一個唯一的標識名并且可以包含無限量的文檔(數據),這也被稱為面向集合(collection-oriented);而對于存儲在MongoDB里的文檔,我們都不需要指導它的結構定義,這被稱為模式自由(schema-free)。
MongoDB數據庫與SQL數據庫的結構對比圖:
influx數據庫 【時序數據庫】
要了解這個數據庫,我們需要先理解一個概念:時序數據庫,經常應用于機房運維監控、物聯網IoT設備采集存儲、互聯網廣告點擊分析等基于時間線且多源數據連續涌入數據平臺的應用場景。InfluxDB專為時序數據存儲而生。
時序數據應用場景就是在時間線上每個時間點都會從多個數據源涌入數據,按照連續時間的多種緯度產生大量數據,并按秒甚至毫秒計算的實時性寫入存儲。時序數據結構:數據源(DataSource)+指標項(Metric)+時間戳(TimeStamp)=數據點,每個數據點就是時間線上的一個指標測量點。
InfluxDB并沒有打算完全搞一套全新的數據存儲理論體系,而是在參考HBase的LSM-Tree數據模型后,建立一套適合時序數據的存儲架構,名叫TSM。而InfluxDB在Cache中重新優化了結構:Map集合<數據源,Map集合<指標,List列表<時間戳:數據值>>>。
參考資料
http://c.biancheng.net/view/4504.html
https://blog.csdn.net/mijichui2153/article/details/104768538
https://www.modb.pro/db/71269
https://baike.baidu.com/item/openGauss/49969162
https://res-static.hc-cdn.cn/cloudbu-site/china/zh-cn/云學院/Materials for certification/HCIA-openGaussV1.0TrainingMaterial.pdf
https://aws.amazon.com/cn/rds/postgresql/what-is-postgresql/
https://blog.csdn.net/asmartkiller/article/details/120497944
http://www.uml.org.cn/sjjm/201803161.asp
https://www.runoob.com/mongodb/mongodb-intro.html
https://juejin.cn/post/7027025915704016910
征文活動
【這次高斯不是數學家】有獎征文火熱進行中:https://bbs.huaweicloud.com/blogs/345260
GaussDB數據庫 Redis 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。