天天看點

一文讀懂10 種分布式資料庫

作者:傳知摩爾獅

在傳統的資料庫系統中,資料是以集中的方式存儲和管理的。然而,随着網際網路和大資料時代的到來,傳統方法已經無法滿足對海量資料存儲和通路的需求。這時分布式資料庫系統便應運而生。分布式資料庫系統将資料分散存儲在多台伺服器上,并通過網絡連接配接來實作資料的共享和通路。分布式資料庫系統可以提供更高的可用性、更高的性能和更好的擴充性,是以被廣泛應用于各行各業的領域。

下面跟着摩爾獅的腳步,了解10種分布式資料庫。

一、關系型 vs 非關系型

1.1 關系型

1.1.1 什麼是關系型?

關系型資料庫指的是使用關系模型(二維表格模型)來組織資料的資料庫,由二維表及其之間的聯系所組成的一個資料組織。

1.1.2 常見關系型資料庫

常見關系型資料庫管理系統(ORDBMS):Oracle、MySql、Microsoft SQL Server、SQLite、PostgreSQ、IBM DB2。

1.1.3 關系型的優勢

●采用二維表結構非常貼近正常開發邏輯。

●支援通用的SQL(結構化查詢語言)語句。

●豐富的完整性大大減少了資料備援和資料不一緻的問題。

●可以用SQL句子多個表之間做非常繁雜的查詢;

●關系型資料庫提供對事務的支援。

1.1.4 關系型的不足之處

(1)存儲的是行記錄。

不能存儲數組、嵌套字段等格式的資料。

(2)擴充表結構不友善。

操作不存在的列會報錯,而增加列又需要執行 SQL 語句才行。而且修改時需要特别注意,因為更新表時會長時間鎖表,這對線上環境可能造成嚴重影響。

(3)占用記憶體高。

關系型資料庫在對大量資料的表進行統計之類的運算時,占用記憶體會很高,因為它即使隻針對某一列進行運算,也會将整行資料從儲存設備讀入記憶體。

(4)全文搜尋性能差

類似于 MySQL 的關系型資料庫,隻能用 like 進行整表掃描的比對,效率很低。現如今,有很多場景需要支援模糊比對,而且必須支援高效查找。比如查詢包含關鍵字的日志資訊,又或者是根據某個商品關鍵字查詢商品清單。

1.2 非關系型

1.2.1 什麼是非關系型?

NoSQL

NoSQL(NoSQL = Not Only SQL ),意即"不僅僅是SQL"。

非關系型資料庫嚴格上不是一種資料庫,應該是一種資料結構化存儲方法的集合,可以是文檔或者鍵值對等。

1.2.2 常見非關系型資料庫

●鍵值資料庫:Redis、Memcached、Riak。

●列式資料庫:Bigtable、HBase、Cassandra。

●文檔資料庫:MongoDB、CouchDB、MarkLogic。

●圖形資料庫:Neo4j、InfoGrid。

1.2.3 非關系型的優勢

●格式靈活:存儲資料的格式可以是key,value形式、文檔形式、圖檔形式等等,文檔形式、圖檔形式等等,使用靈活,應用場景廣泛,而關系型資料庫則隻支援基礎類型。

●速度快:NoSQL 可以使用硬碟或者記憶體來存儲,而關系型資料庫隻能使用硬碟;

●高擴充性;

●成本低:nosql資料庫部署簡單,基本都是開源軟體。

1.2.4 非關系型的不足之處

●不提供sql支援,學習和使用成本較高;

●無事務處理。MongoDB 4.0 已支援事務。

●資料結構相對複雜,複雜查詢方面稍欠。

二、分布式資料庫

2.1 分布式資料庫的定義

分布式資料庫其實沒有一個官方的定義,隻是技術人員提出的一個約定俗成的說法。

在資料庫領域,當産品不斷演進逐漸被大家認識和認可後,就會成了一個标準,比如說微軟的 SQL Server 資料庫,其他資料庫都喜歡拿它作為對比,那 SQL Server 資料庫就會成為一個标準。

但是分布式資料庫也是最近幾年才被大家提出,還是比較新的,也沒有參照。不過可以通過這些大廠大牛們總結的經驗來認識分布式資料庫。

分布式資料庫就是用分布式架構實作的資料庫。

2.2 分布式資料庫的優勢

現在很多流行的技術都用上了分布式架構,比如微服務、消息隊列。

那為什麼要用分布式架構呢?簡單來說,就是用多機(機器)來橫向擴充單機的性能,另外一個很重要的原因就是分布式的可靠性,比如多機備份、容災等。

那資料庫是不是也需要提升性能和保證可靠性呢?答案是肯定的。

哪些大廠在用分布式資料庫?

每年雙 11,阿裡就喜歡 show 一波交易戰績,其分布式資料庫 OceanBase 功不可沒。頭部大廠如騰訊、位元組跳動、美團也開始使用分布式資料庫,還有各大銀行也上線了分布式資料庫。

是以說分布式資料庫是一種趨勢,如果業務場景要求高性能和高可靠,就可以考慮使用分布式架構下的資料庫了。

2.3 分布式資料庫的特點

首先來看下資料庫按照交易類型區分的兩大場景:

●聯機交易(OLTP)OLTP 是面向交易的處理過程,單筆交易的資料量小,但是要在很短的時間内給出結果,典型場景包括購物、繳費、轉賬等;

●聯機分析(OLAP)OLAP 場景通常是基于大資料集的運算,典型場景包括生成個人年度賬單和企業财務報表等。

OLTP 的特點是寫多讀少、低延時、高并發,那麼資料庫+分布式在 OLTP 場景下會具有哪些特點呢?

特點:

●在寫多讀少的場景很強大。

●低延時的響應。

●支援高并發。

●支援海量存儲。

●高可靠性。

三、10 種分布式資料庫

3.1 PingCAP 的 TiDB

開源 + 良好的社群營運,擁有超高人氣。

定義:是一款同時支援線上事務處理與線上分析處理 (Hybrid Transactional and Analytical Processing, HTAP)的融合型分布式資料庫産品,具備水準擴容或者縮容、金融級高可用、實時 HTAP、雲原生的分布式資料庫、相容 MySQL 5.7 協定和 MySQL 生态等重要特性。目标是為使用者提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解決方案。TiDB 适合高可用、強一緻要求較高、資料規模較大等各種應用場景。

一文讀懂10 種分布式資料庫

TiDB 架構圖

TIDB 采用分層架構,有三種角色:

●TIDB:作為 SQL 引擎。

●TiKV:作為底層分布式鍵值存儲。

●PD:承擔中繼資料管理和全局時鐘的職責。

TiDB 的衍生項目:

●Ti-Binlog、Ti-CDC 支援資料導出。

●Ti-Operator 更友善地實作容器雲部署。

●Chaos Mesh 支援混沌工程。

缺點:不支援全球化部署,這為跨地域大規模叢集應用 TiDB 設定了障礙。

3.2 Google 的 Spanner

Spanner是谷歌公司研發的、可擴充的、多版本、全球分布式、同步複制資料庫。它支援外部一緻性的分布式事務。

一文讀懂10 種分布式資料庫

Spanner 架構,來自 Google 論文

F1 主要作為 SQL 引擎

Spanner 主要負責事務一緻性、複制機制、可擴充存儲等。

Spanner 架構中的核心處理子產品是 Spanserver

一文讀懂10 種分布式資料庫

Spanner 的架構,來自 Google 論文

Spanserver 的核心工作有三部分:

●基于 Paxos 協定的資料複制。

●基于 Tablet 的分片管理。

●基于 2PC 的事務一緻性管理。

2017 年,F1 和 Spanner 被拆分了,不再是綁定關系。原理如如下:

一文讀懂10 種分布式資料庫

來自 Google 論文

3.3 CockroachDB 蟑螂資料庫

CockroachDB (蟑螂資料庫)是一個可伸縮的、支援地理位置處理、支援事務處理的資料存儲系統。

為什麼叫做蟑螂?

因為這個資料庫隻要損壞的節點不超過總數一半,那麼叢集仍然可以正常工作,生命力超強。

通過分布式一緻性算法執行個體來調節確定一緻性,它所選擇使用Raft一緻性算法。所有的一緻性狀态存在于RocksDB中。

一文讀懂10 種分布式資料庫

Cockroach 是一個分布式的 SQL 資料庫。首要設計目标就是 可擴充性,強一緻性,可存活性,就像它的名字一樣。

Cockroach 的目标是在無人工幹預的情況下,以極小的中斷時間容忍磁盤,主機,機架甚至 資料中心災難 。

Cockroach 的節點是對等的,其中一個設計目标是以最少配置加無依賴,部署去中心化的對等節點。

CockroachDB 提供兩種不同的的事務特性,包括快照隔離(snapshot isolation,簡稱SI)和順序的快照隔離(SSI)語義,後者是預設的隔離級别。

CockroachDB 是一個分布式的K/V資料倉庫,支援ACID事務,多版本值存儲是其首要特性。主要的設計目标是全球一緻性和可靠性,從蟑螂的命名上是就能看出這點。蟑螂資料庫能處理磁盤、實體機器、機架甚至資料中心失效情況下最小延遲的服務中斷;整個失效過程無需人工幹預。蟑螂的節點是均衡的,其設計目标是同質部署(隻有一個二進制包)且最小配置。

CockroachDB 和 TiDB、YugabyteDB 都公開聲稱設計靈感來自 Spanner,是以往往會被認為是同構的産品。CockroachDB 和 TiDB,經常會被大家拿來比較。

差別:

●CockroachDB 采用了标準的 P2P 架構,隻要損壞的節點不超過總數一半,那麼叢集仍然可以正常工作。

●CockroachDB 支援全球化部署,因為它采用了混合邏輯時鐘(HLC),是以能夠在全球實體範圍下做到資料一緻性。

●分片管理機制的不同。

3.4 YugabyteDB

在架構上和 CockroachDB 有很多相似之處,比如支援全球化部署,采用混合邏輯時鐘(HLC),基于 Percolator 的事務模型,相容 PostgreSQL 協定。

由于高度的相似性,YugabyteDB 與 CockroachDB 的競争表現得非常激烈。

Yugabyte 采用兩層架構:查詢層和存儲層。不過這個架構僅僅是邏輯上的,部署結構中,這兩層都位于 TServer 程序中。這一點和 TiDB 不同。

Yugabyte 的查詢層支援同時 SQL 和 CQL 兩種 API,其中 CQL 是相容 Cassandra 的一種方言文法,對應于文檔資料庫的存儲模型;而 SQL API 是直接基于 PostgresQL 魔改的,能比較好地相容 PG 文法,

Yugabyte 的存儲層才是重頭戲。其中 TServer 負責存儲 tablet,每個 tablet 對應一個 Raft Group,分布在三個不同的節點上,以此保證高可用性。Master 負責中繼資料管理,除了 tablet 的位置資訊,還包括表結構等資訊。Master 本身也依靠 Raft 實作高可用。

一文讀懂10 種分布式資料庫

YugabyteDB 架構

3.5 阿裡OceanBase

OceanBase是由螞蟻集團完全自主研發的金融級分布式關系資料庫,始創于2010年。OceanBase具有資料強一緻、高可用、高性能、線上擴充、高度相容SQL标準和主流關系資料庫、低成本等特點。\

3.6 騰訊的 TDSQL

TDSQL 的節點都是用的 MySQL。它是采用分布式叢集架構(如下圖),這種叢集架構具有較高的靈活性,簡化了各個 節點之間的通信機制,也簡化了對于硬體的需求。這不僅意味着 TDSQL 的關系型執行個體、分 布式執行個體、分析性執行個體可以混合部署在同一叢集中,也意味着即使是簡單的 x86 伺服器,也 可以搭建出類似于小型機、共享存儲等一樣穩定可靠的資料庫。

一文讀懂10 種分布式資料庫

TDSL 架構

3.7 中興通訊的 GoldenDB

GoldenDB 幾乎是國内銀行業應用規模最大的分布式資料庫,和 TDSQL 同樣在資料節點上選擇了 MySQL,但全局時鐘節點的增加使它稱為一個标準的 PGXC 架構。

一文讀懂10 種分布式資料庫

3.8 騰訊的 TBase

TBase 是騰訊資料平台團隊在開源的 PostgreSQL 基礎上研發的企業級分布式 HTAP 資料庫管理系統:

●具備高性能可擴充的分布式事務能力,支援 RC 和 RR 兩種隔離級别;

●通過安全、管理、審計三權分立體系,提供全方位的資料安全保證機制;

●支援高性能分區表,可使得資料檢索效率成倍提升;

●SQL 方面相容 2003 标準、PostgreSQL 文法和常用 Oracle 函數&資料類型、視窗函數等;

●提供大小商戶資料分離、冷熱資料分離等高效的資料治理能力

一文讀懂10 種分布式資料庫

叢集中有三種節點類型,各自承擔不同的功能,通過網絡連接配接成為一個系統。這三種節點類型分别是:

●**Coordinator:協調節點,對外提供接口,負責資料的分發和查詢規劃,多個節點位置對等,每個節點都提供相同的資料庫視圖,CN 存儲系統的全局中繼資料。

●Datanode:**處理存儲本節點相關的中繼資料,每個節點還存儲資料的一個分片。在功能上,DN 節點負責完成執行協調節點分發的執行請求。

●GTM: 全局事務管理器(Global transaction manager.),負責管理叢集事務資訊,同時管理叢集的全局對象,比如序列,除此之外 GTM 上不提供其他的功能。

3.9 VoltDB

VoltDB 官網提供的簡介:VoltDB是全球最快的記憶體型資料庫,它繼承了傳統關系資料庫的強一緻性要求,又提供了網際網路雲上部署的能力和分布式 資料庫的橫向擴充能力。VoltDB通過将資料庫全部儲存在記憶體中的方法,消除了大量的資料和日志的磁盤存取操作,通過單線程的方式,消除了磁盤鎖和記錄鎖;通過資料庫分片技術,讓資料庫支援高并發請求;通過分布式叢集支援資料庫橫向擴充。其查詢速度達到傳統資料庫的100倍以上。

2019 年正式閉源,變為純商業化産品。而同時,VoltDB 在國内也沒有建立完備的服務支援體系,這在很大程度上影響到它的推廣。

3.10 巨杉 SequoiaDB

SequoiaDB 巨杉資料庫是一款開源的金融級分布式關系型資料庫,主要面對高并發聯機交易型場景提供高性能、可靠穩定以及無限水準擴充的資料庫服務。

一文讀懂10 種分布式資料庫

邏輯架構

使用者可以在 SequoiaDB 巨杉資料庫中建立多種類型的資料庫執行個體,以滿足上層不同應用程式各自的需求。

SequoiaDB 巨杉資料庫支援 MySQL、PostgreSQL、SparkSQL 和 MariaDB 四種關系型資料庫執行個體、類 MongoDB 的 JSON 文檔類資料庫執行個體、以及 S3 對象存儲與 POSIX 檔案系統的非結構化資料執行個體。

一文讀懂10 種分布式資料庫

支援七種不同的執行個體類型

SequoiaDB 巨杉資料庫存儲引擎采用分布式架構。叢集中的每個節點為一個獨立程序,節點之間采用 TCP/IP 協定進行通訊。

同一個作業系統可以部署多個節點,節點之間采用不同的端口進行區分。

一文讀懂10 種分布式資料庫

資料庫存儲引擎邏輯架構

一文讀懂10 種分布式資料庫

關于傳知摩爾獅

傳知摩爾獅是廣州傳知資訊科技有限公司旗下針對阿裡雲認證及雲網創立的數字人才教育訓練品牌,傳知摩爾獅成立于2019年,緻力于傳播領先的教育理論,倡導更有效、更高效的學習範式,在IT職業教育領域,研究相關學科的教材教法和教學資源的整合,通過自主研發的學習服務平台推動IT人才的學習和發展,緻力為中國雲計算行業培養數字化人才。

摩爾獅在秉持傳播知識、成就未來的理念下,2021年8月與阿裡雲達成深度合作,成為阿裡雲認證的戰略級教育訓練夥伴。并且,摩爾獅已和超過200家的網際網路廠家簽署了就業合作協定,為企業與國家持續培養輸送面向未來的應用型人才。

關注“傳知摩爾獅”了解更多阿裡雲認證内容

繼續閱讀