<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          帶你遨游銀河系的 10 種分布式數(shù)據(jù)庫

          共 6339字,需瀏覽 13分鐘

           ·

          2021-06-24 13:43



          這次我們來聊下分布式場景下的數(shù)據(jù)庫。

          首先我們還是來看下關(guān)系型和非關(guān)系型的數(shù)據(jù)庫的區(qū)別和特點。

          一、關(guān)系型 vs 非關(guān)系型

          1.1 關(guān)系型

          1.1.1 什么是關(guān)系型?

          關(guān)系型數(shù)據(jù)庫指的是使用關(guān)系模型(二維表格模型)來組織數(shù)據(jù)的數(shù)據(jù)庫,由二維表及其之間的聯(lián)系所組成的一個數(shù)據(jù)組織。

          1.1.2 常見關(guān)系型數(shù)據(jù)庫

          常見關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(ORDBMS):Oracle、MySql、Microsoft SQL Server、SQLite、PostgreSQ、IBM DB2。

          1.1.3 關(guān)系型的優(yōu)勢

          • 采用二維表結(jié)構(gòu)非常貼近正常開發(fā)邏輯。

          • 支持通用的SQL(結(jié)構(gòu)化查詢語言)語句。

          • 豐富的完整性大大減少了數(shù)據(jù)冗余和數(shù)據(jù)不一致的問題。

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

          • 關(guān)系型數(shù)據(jù)庫提供對事務(wù)的支持。

          1.1.4 關(guān)系型的不足之處

          (1)存儲的是行記錄。

          不能存儲數(shù)組、嵌套字段等格式的數(shù)據(jù)。

          (2)擴展表結(jié)構(gòu)不方便

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

          (3)占用內(nèi)存高。

          關(guān)系型數(shù)據(jù)庫在對大量數(shù)據(jù)的表進行統(tǒng)計之類的運算時,占用內(nèi)存會很高,因為它即使只針對某一列進行運算,也會將整行數(shù)據(jù)從存儲設(shè)備讀入內(nèi)存。

          (4)全文搜索性能差

          類似于 MySQL 的關(guān)系型數(shù)據(jù)庫,只能用 like 進行整表掃描的匹配,效率很低。現(xiàn)如今,有很多場景需要支持模糊匹配,而且必須支持高效查找。比如查詢包含關(guān)鍵字的日志信息,又或者是根據(jù)某個商品關(guān)鍵字查詢商品列表。

          1.2 非關(guān)系型

          1.2.1 什么是非關(guān)系型?

          NoSQL

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

          非關(guān)系型數(shù)據(jù)庫嚴格上不是一種數(shù)據(jù)庫,應(yīng)該是一種數(shù)據(jù)結(jié)構(gòu)化存儲方法的集合,可以是文檔或者鍵值對等。

          1.2.2 常見非關(guān)系型數(shù)據(jù)庫

          • 鍵值數(shù)據(jù)庫:Redis、Memcached、Riak。

          • 列式數(shù)據(jù)庫:Bigtable、HBase、Cassandra。

          • 文檔數(shù)據(jù)庫:MongoDB、CouchDB、MarkLogic。

          • 圖形數(shù)據(jù)庫:Neo4j、InfoGrid。

          1.2.3 非關(guān)系型的優(yōu)勢

          • 格式靈活:存儲數(shù)據(jù)的格式可以是key,value形式、文檔形式、圖片形式等等,文檔形式、圖片形式等等,使用靈活,應(yīng)用場景廣泛,而關(guān)系型數(shù)據(jù)庫則只支持基礎(chǔ)類型。
          • 速度快:NoSQL 可以使用硬盤或者內(nèi)存來存儲,而關(guān)系型數(shù)據(jù)庫只能使用硬盤;
          • 高擴展性;
          • 成本低:nosql數(shù)據(jù)庫部署簡單,基本都是開源軟件。

          1.2.4 非關(guān)系型的不足之處

          • 不提供sql支持,學習和使用成本較高;
          • 無事務(wù)處理。MongoDB 4.0 已支持事務(wù)。
          • 數(shù)據(jù)結(jié)構(gòu)相對復雜,復雜查詢方面稍欠。

          二、分布式數(shù)據(jù)庫

          2.1 分布式數(shù)據(jù)庫的定義

          分布式數(shù)據(jù)庫其實沒有一個官方的定義,只是我們技術(shù)人員提出的一個約定俗成的說法。

          在數(shù)據(jù)庫領(lǐng)域,當產(chǎn)品不斷演進逐漸被大家認識和認可后,就會成了一個標準,比如說微軟的 SQL Server 數(shù)據(jù)庫,其他數(shù)據(jù)庫都喜歡拿它作為對比,那 SQL Server 數(shù)據(jù)庫就會成為一個標準。

          但是分布式數(shù)據(jù)庫也是最近幾年才被大家提出,還是比較新的,也沒有參照。不過我們可以通過這些大廠大牛們總結(jié)的經(jīng)驗來認識分布式數(shù)據(jù)庫。

          分布式數(shù)據(jù)庫就是用分布式架構(gòu)實現(xiàn)的數(shù)據(jù)庫。

          2.2 分布式數(shù)據(jù)庫的優(yōu)勢

          分布式一直是我研究的一個話題,現(xiàn)在很多流行的技術(shù)都用上了分布式架構(gòu),比如微服務(wù)、消息隊列。

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

          那數(shù)據(jù)庫是不是也需要提升性能和保證可靠性呢?答案是肯定的。

          哪些大廠在用分布式數(shù)據(jù)庫?

          每年雙 11,阿里就喜歡 show 一波交易戰(zhàn)績,其分布式數(shù)據(jù)庫 OceanBase 功不可沒。頭部大廠如騰訊、字節(jié)跳動、美團也開始使用分布式數(shù)據(jù)庫,還有各大銀行也上線了分布式數(shù)據(jù)庫。

          所以說分布式數(shù)據(jù)庫是一種趨勢,如果業(yè)務(wù)場景要求高性能和高可靠,就可以考慮使用分布式架構(gòu)下的數(shù)據(jù)庫了。

          2.3 分布式數(shù)據(jù)庫的特點

          首先我們來看下數(shù)據(jù)庫按照交易類型區(qū)分的兩大場景:

          • 聯(lián)機交易(OLTP)

            OLTP 是面向交易的處理過程,單筆交易的數(shù)據(jù)量小,但是要在很短的時間內(nèi)給出結(jié)果,典型場景包括購物、繳費、轉(zhuǎn)賬等;

          • 聯(lián)機分析(OLAP)

            OLAP 場景通常是基于大數(shù)據(jù)集的運算,典型場景包括生成個人年度賬單和企業(yè)財務(wù)報表等。

          OLTP 的特點是寫多讀少、低延時、高并發(fā),那么數(shù)據(jù)庫+分布式在 OLTP 場景下會具有哪些特點呢?

          特點

          • 在寫多讀少的場景很強大。
          • 低延時的響應(yīng)。
          • 支持高并發(fā)。
          • 支持海量存儲。
          • 高可靠性。

          三、10 種分布式數(shù)據(jù)庫

          3.1 PingCAP 的 TiDB

          開源 + 良好的社區(qū)運營,擁有超高人氣。

          定義:是一款同時支持在線事務(wù)處理與在線分析處理 (Hybrid Transactional and Analytical Processing, HTAP)的融合型分布式數(shù)據(jù)庫產(chǎn)品,具備水平擴容或者縮容、金融級高可用、實時 HTAP、云原生的分布式數(shù)據(jù)庫、兼容 MySQL 5.7 協(xié)議和 MySQL 生態(tài)等重要特性。目標是為用戶提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解決方案。TiDB 適合高可用、強一致要求較高、數(shù)據(jù)規(guī)模較大等各種應(yīng)用場景。

          TiDB 架構(gòu)圖

          TIDB 采用分層架構(gòu),有三種角色:

          • TIDB:作為 SQL 引擎。
          • TiKV:作為底層分布式鍵值存儲。
          • PD:承擔元數(shù)據(jù)管理和全局時鐘的職責。

          TiDB 的衍生項目:

          • Ti-Binlog、Ti-CDC 支持數(shù)據(jù)導出。
          • Ti-Operator 更方便地實現(xiàn)容器云部署。
          • Chaos Mesh 支持混沌工程。

          缺點:不支持全球化部署,這為跨地域大規(guī)模集群應(yīng)用 TiDB 設(shè)置了障礙。

          3.2 Google 的 Spanner

          Spanner是谷歌公司研發(fā)的、可擴展的、多版本、全球分布式、同步復制數(shù)據(jù)庫。它支持外部一致性的分布式事務(wù)。

          Spanner 架構(gòu),來自 Google 論文

          F1 主要作為 SQL 引擎

          Spanner 主要負責事務(wù)一致性、復制機制、可擴展存儲等。

          Spanner 架構(gòu)中的核心處理模塊是 Spanserver,

          Spanner 的架構(gòu),來自 Google 論文

          Spanserver 的核心工作有三部分:

          2017 年,F(xiàn)1 和 Spanner 被拆分了,不再是綁定關(guān)系。原理如如下:

          來自 Google 論文

          3.3 CockroachDB 蟑螂數(shù)據(jù)庫

          CockroachDB (蟑螂數(shù)據(jù)庫)是一個可伸縮的、支持地理位置處理、支持事務(wù)處理的數(shù)據(jù)存儲系統(tǒng)。

          為什么叫做蟑螂?

          因為這個數(shù)據(jù)庫只要損壞的節(jié)點不超過總數(shù)一半,那么集群仍然可以正常工作,生命力超強。

          通過分布式一致性算法實例來調(diào)節(jié)確保一致性,它所選擇使用Raft一致性算法。所有的一致性狀態(tài)存在于RocksDB中。

          Cockroach 是一個分布式的 SQL 數(shù)據(jù)庫。首要設(shè)計目標就是 可擴展性強一致性,可存活性,就像它的名字一樣。Cockroach 的目標是在無人工干預的情況下,以極小的中斷時間容忍磁盤,主機,機架甚至 數(shù)據(jù)中心災(zāi)難 。Cockroach 的節(jié)點是對等的,其中一個設(shè)計目標是以最少配置加無依賴,部署去中心化的對等節(jié)點。中文社區(qū)地址:cockroachdb-cn。

          CockroachDB 提供兩種不同的的事務(wù)特性,包括快照隔離(snapshot isolation,簡稱SI)和順序的快照隔離(SSI)語義,后者是默認的隔離級別。

          CockroachDB 是一個分布式的K/V數(shù)據(jù)倉庫,支持ACID事務(wù),多版本值存儲是其首要特性。主要的設(shè)計目標是全球一致性和可靠性,從蟑螂的命名上是就能看出這點。蟑螂數(shù)據(jù)庫能處理磁盤、物理機器、機架甚至數(shù)據(jù)中心失效情況下最小延遲的服務(wù)中斷;整個失效過程無需人工干預。蟑螂的節(jié)點是均衡的,其設(shè)計目標是同質(zhì)部署(只有一個二進制包)且最小配置。

          CockroachDB 和 TiDB、YugabyteDB 都公開聲稱設(shè)計靈感來自 Spanner,所以往往會被認為是同構(gòu)的產(chǎn)品。CockroachDB 和 TiDB,經(jīng)常會被大家拿來比較。

          區(qū)別:

          • CockroachDB 采用了標準的 P2P 架構(gòu),只要損壞的節(jié)點不超過總數(shù)一半,那么集群仍然可以正常工作。
          • CockroachDB 支持全球化部署,因為它采用了混合邏輯時鐘(HLC),所以能夠在全球物理范圍下做到數(shù)據(jù)一致性。
          • 分片管理機制的不同。

          3.4 YugabyteDB

          在架構(gòu)上和 CockroachDB 有很多相似之處,比如支持全球化部署,采用混合邏輯時鐘(HLC),基于 Percolator 的事務(wù)模型,兼容 PostgreSQL 協(xié)議。

          由于高度的相似性,YugabyteDB 與 CockroachDB 的競爭表現(xiàn)得非常激烈。

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

          Yugabyte 的查詢層支持同時 SQL 和 CQL 兩種 API,其中 CQL 是兼容 Cassandra 的一種方言語法,對應(yīng)于文檔數(shù)據(jù)庫的存儲模型;而 SQL API 是直接基于 PostgresQL 魔改的,能比較好地兼容 PG 語法,

          Yugabyte 的存儲層才是重頭戲。其中 TServer 負責存儲 tablet,每個 tablet 對應(yīng)一個 Raft Group,分布在三個不同的節(jié)點上,以此保證高可用性。Master 負責元數(shù)據(jù)管理,除了 tablet 的位置信息,還包括表結(jié)構(gòu)等信息。Master 本身也依靠 Raft 實現(xiàn)高可用。

          YugabyteDB 架構(gòu)

          3.5 阿里OceanBase

          OceanBase是由螞蟻集團完全自主研發(fā)的金融級分布式關(guān)系數(shù)據(jù)庫,始創(chuàng)于2010年。OceanBase具有數(shù)據(jù)強一致、高可用、高性能、在線擴展、高度兼容SQL標準和主流關(guān)系數(shù)據(jù)庫、低成本等特點。

          3.6 騰訊的 TDSQL

          TDSQL 的節(jié)點都是用的 MySQL。它是采用分布式集群架構(gòu)(如下圖),這種集群架構(gòu)具有較高的靈活性,簡化了各個 節(jié)點之間的通信機制,也簡化了對于硬件的需求。這不僅意味著 TDSQL 的關(guān)系型實例、分 布式實例、分析性實例可以混合部署在同一集群中,也意味著即使是簡單的 x86 服務(wù)器,也 可以搭建出類似于小型機、共享存儲等一樣穩(wěn)定可靠的數(shù)據(jù)庫。

          TDSL 架構(gòu)

          3.7 中興通訊的 GoldenDB

          GoldenDB 幾乎是國內(nèi)銀行業(yè)應(yīng)用規(guī)模最大的分布式數(shù)據(jù)庫,和 TDSQL 同樣在數(shù)據(jù)節(jié)點上選擇了 MySQL,但全局時鐘節(jié)點的增加使它稱為一個標準的 PGXC 架構(gòu)。

          3.8 騰訊的 TBase

          TBase 是騰訊數(shù)據(jù)平臺團隊在開源的 PostgreSQL 基礎(chǔ)上研發(fā)的企業(yè)級分布式 HTAP 數(shù)據(jù)庫管理系統(tǒng):

          • 具備高性能可擴展的分布式事務(wù)能力,支持 RC 和 RR 兩種隔離級別;
          • 通過安全、管理、審計三權(quán)分立體系,提供全方位的數(shù)據(jù)安全保證機制;
          • 支持高性能分區(qū)表,可使得數(shù)據(jù)檢索效率成倍提升;
          • SQL 方面兼容 2003 標準、PostgreSQL 語法和常用 Oracle 函數(shù)&數(shù)據(jù)類型、窗口函數(shù)等;
          • 提供大小商戶數(shù)據(jù)分離、冷熱數(shù)據(jù)分離等高效的數(shù)據(jù)治理能力

          集群中有三種節(jié)點類型,各自承擔不同的功能,通過網(wǎng)絡(luò)連接成為一個系統(tǒng)。這三種節(jié)點類型分別是:

          • **Coordinator:**協(xié)調(diào)節(jié)點,對外提供接口,負責數(shù)據(jù)的分發(fā)和查詢規(guī)劃,多個節(jié)點位置對等,每個節(jié)點都提供相同的數(shù)據(jù)庫視圖,CN 存儲系統(tǒng)的全局元數(shù)據(jù)。
          • **Datanode:**處理存儲本節(jié)點相關(guān)的元數(shù)據(jù),每個節(jié)點還存儲數(shù)據(jù)的一個分片。在功能上,DN 節(jié)點負責完成執(zhí)行協(xié)調(diào)節(jié)點分發(fā)的執(zhí)行請求。
          • GTM: 全局事務(wù)管理器(Global transaction manager.),負責管理集群事務(wù)信息,同時管理集群的全局對象,比如序列,除此之外 GTM 上不提供其他的功能。

          3.9 VoltDB

          VoltDB 官網(wǎng)提供的簡介:VoltDB是全球最快的內(nèi)存型數(shù)據(jù)庫,它繼承了傳統(tǒng)關(guān)系數(shù)據(jù)庫的強一致性要求,又提供了互聯(lián)網(wǎng)云上部署的能力和分布式 數(shù)據(jù)庫的橫向擴展能力。VoltDB通過將數(shù)據(jù)庫全部保存在內(nèi)存中的方法,消除了大量的數(shù)據(jù)和日志的磁盤存取操作,通過單線程的方式,消除了磁盤鎖和記錄鎖;通過數(shù)據(jù)庫分片技術(shù),讓數(shù)據(jù)庫支持高并發(fā)請求;通過分布式集群支持數(shù)據(jù)庫橫向擴展。其查詢速度達到傳統(tǒng)數(shù)據(jù)庫的100倍以上。

          2019 年正式閉源,變?yōu)榧兩虡I(yè)化產(chǎn)品。而同時,VoltDB 在國內(nèi)也沒有建立完備的服務(wù)支持體系,這在很大程度上影響到它的推廣。

          3.10 巨杉 SequoiaDB

          SequoiaDB 巨杉數(shù)據(jù)庫是一款開源的金融級分布式關(guān)系型數(shù)據(jù)庫,主要面對高并發(fā)聯(lián)機交易型場景提供高性能、可靠穩(wěn)定以及無限水平擴展的數(shù)據(jù)庫服務(wù)。

          邏輯架構(gòu)

          用戶可以在 SequoiaDB 巨杉數(shù)據(jù)庫中創(chuàng)建多種類型的數(shù)據(jù)庫實例,以滿足上層不同應(yīng)用程序各自的需求。

          SequoiaDB 巨杉數(shù)據(jù)庫支持 MySQL、PostgreSQL、SparkSQL 和 MariaDB 四種關(guān)系型數(shù)據(jù)庫實例、類 MongoDB 的 JSON 文檔類數(shù)據(jù)庫實例、以及 S3 對象存儲與 POSIX 文件系統(tǒng)的非結(jié)構(gòu)化數(shù)據(jù)實例。

          支持七種不同的實例類型

          SequoiaDB 巨杉數(shù)據(jù)庫存儲引擎采用分布式架構(gòu)。集群中的每個節(jié)點為一個獨立進程,節(jié)點之間采用 TCP/IP 協(xié)議進行通訊。

          同一個操作系統(tǒng)可以部署多個節(jié)點,節(jié)點之間采用不同的端口進行區(qū)分。

          數(shù)據(jù)庫存儲引擎邏輯架構(gòu)

          好了,對于分布式數(shù)據(jù)庫,如果你也有分布式數(shù)據(jù)庫的使用經(jīng)驗,歡迎留言~

          參考資料:

          https://docs.pingcap.com/zh/tidb/stable

          http://vldb.org/pvldb/vol11/p1835-samwel.pdf

          http://ericfu.me/yugabyte-db-introduction/

          https://blog.csdn.net/duan_zhihua/article/details/88549173

          https://www.voltdb.com/

          https://www.zhihu.com/question/24225007/answer/1707736658

          https://www.zhihu.com/question/24225007/answer/1326259742

          https://time.geekbang.org/column/article/296558

          瀏覽 44
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲天堂网在线视频观看 | 91性| 九九九九在线视频 | 乱码av一起艹 | 婷婷干|