mycat基本介紹

目錄

mycat基本介紹
mycat的安裝及使用

前置知識

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

隨著技術(shù)的發(fā)展,各個行業(yè)所產(chǎn)生的數(shù)據(jù)量呈爆炸式增長,動輒就達(dá)到數(shù)百TB或者PB的級別,已經(jīng)遠(yuǎn)遠(yuǎn)超過了傳統(tǒng)單機(jī)數(shù)據(jù)庫的處理能力,因此分布式數(shù)據(jù)庫已經(jīng)成為了最最迫切的需求。

分布式數(shù)據(jù)庫是指數(shù)據(jù)在物理上分步而在邏輯上集中管理的數(shù)據(jù)庫系統(tǒng)。物理上分步是指分布式數(shù)據(jù)庫的數(shù)據(jù)分步在物理位置不同并由網(wǎng)絡(luò)連接的節(jié)點(diǎn)或站點(diǎn)上;邏輯上集中是指各數(shù)據(jù)庫節(jié)點(diǎn)之間在邏輯上是一個整體,并由統(tǒng)一的數(shù)據(jù)庫管理系統(tǒng)管理,不同的節(jié)點(diǎn)分步可以跨不同的機(jī)房、城市甚至國家。

分布式數(shù)據(jù)庫的特點(diǎn):

透明性:用戶不必關(guān)心數(shù)據(jù)的邏輯分區(qū)和物理位置分步的細(xì)節(jié),也不必關(guān)系重復(fù)副本的一致性問題,同時不必關(guān)系在局部場地上數(shù)據(jù)庫支持哪種數(shù)據(jù)模型,對于開發(fā)工程師而言,當(dāng)數(shù)據(jù)庫從一個場地移到另一個場地時必須改寫應(yīng)用程序,使用起來如果一個數(shù)據(jù)庫。

數(shù)據(jù)冗余性:分布式數(shù)據(jù)庫通過冗余實(shí)現(xiàn)系統(tǒng)的可靠性、可用性,并改善其性能。多個節(jié)點(diǎn)存儲數(shù)據(jù)副本,當(dāng)某一個節(jié)點(diǎn)的數(shù)據(jù)遭到破壞時,冗余的副本可保證數(shù)據(jù)的完整性;當(dāng)工作的節(jié)點(diǎn)受損害時,可通過心跳等機(jī)制進(jìn)行切換,系統(tǒng)整體不被破壞。還可以通過熱點(diǎn)數(shù)據(jù)的就近分步原則減少網(wǎng)絡(luò)通信的消耗,加快訪問速度,改善性能。

易于擴(kuò)展性:在分布式數(shù)據(jù)庫中能夠方便地通過水平擴(kuò)展提高系統(tǒng)的整體性能,也能夠通過垂直擴(kuò)展來提高性能,擴(kuò)展并不需要修改系統(tǒng)程序。

自治性:各節(jié)點(diǎn)上的數(shù)據(jù)由本地的DBMS管理,具有自治處理能力,完成本場地的應(yīng)用或局部應(yīng)用

分布式數(shù)據(jù)庫還具有經(jīng)濟(jì)、性能優(yōu)越、響應(yīng)速度更快、靈活的體系結(jié)構(gòu)、易于繼承現(xiàn)有系統(tǒng)等特點(diǎn)。

分布式數(shù)據(jù)庫的實(shí)現(xiàn)原理

分布式數(shù)據(jù)庫具有邏輯整體性、物理分布式,正是因為其物理分布性才使得分布式數(shù)據(jù)庫的實(shí)現(xiàn)變得更加復(fù)雜,因為數(shù)據(jù)劃分后存儲在不同的節(jié)點(diǎn)上,而為了保證可靠性,需要存儲多個副本,所以產(chǎn)生了數(shù)據(jù)復(fù)制的問題。為了保證良好的性能,分布式數(shù)據(jù)庫必須易于擴(kuò)展,具體來講分布式數(shù)據(jù)庫應(yīng)有4個優(yōu)勢:數(shù)據(jù)分片及復(fù)制管理、具有事務(wù)的可靠性存取、良好的性能、易于擴(kuò)展,所以分布式數(shù)據(jù)庫在設(shè)計上需要實(shí)現(xiàn)數(shù)據(jù)庫的目錄管理、數(shù)據(jù)分片、分布式查詢處理、分布式并發(fā)控制、分布式鎖管理、分布式存儲、分布式網(wǎng)絡(luò)架構(gòu)、分布式安全管理等。

1、分布式數(shù)據(jù)庫的目錄管理

分布式數(shù)據(jù)庫的目錄存放著系統(tǒng)元數(shù)據(jù)及數(shù)據(jù)庫的元數(shù)據(jù)的全部信息,這些數(shù)據(jù)的存在是為了正確、有效地訪問數(shù)據(jù)。數(shù)據(jù)的增刪改查操作都需要用到目錄,用戶授權(quán)、安全管理及并發(fā)控制等也都需要用到目錄,目錄結(jié)構(gòu)的合理性直接影響數(shù)據(jù)庫的性能。目錄一般包括各級的描述、訪問方法的描述、關(guān)于數(shù)據(jù)庫的統(tǒng)計數(shù)據(jù)和一致性信息等,系統(tǒng)根據(jù)這些信息將用戶查詢轉(zhuǎn)換為物理數(shù)據(jù)庫上的查詢,選擇一條最佳的存取路徑進(jìn)行事務(wù)管理及安全性、完整性檢查等。

分布式數(shù)據(jù)庫的目錄課分為全局目錄、分布式目錄、全局與本地混合目錄。

2、數(shù)據(jù)分片

當(dāng)數(shù)據(jù)庫過于龐大,尤其是寫入過于頻繁且很難由一臺主機(jī)支撐時,我們還是會面臨擴(kuò)展瓶頸。我們將存放在同一個數(shù)據(jù)庫實(shí)例中的數(shù)據(jù)分散存放到多個數(shù)據(jù)庫實(shí)例上,進(jìn)行多臺設(shè)備存取以提高性能,在切分?jǐn)?shù)據(jù)的同時可以提高系統(tǒng)整體的可用性。

數(shù)據(jù)分片是指將數(shù)據(jù)全局地劃分為相關(guān)的邏輯片段,有水平切分、垂直切分、混合切分三種類型。

水平切分:按照某個字段的某種規(guī)則分散到多個節(jié)點(diǎn)庫中,每個節(jié)點(diǎn)中包含一部分?jǐn)?shù)據(jù)。可以將數(shù)據(jù)的水平切分簡單理解為按照數(shù)據(jù)行進(jìn)行切分,就是將表中的某些行切分到一個節(jié)點(diǎn),將另外某些行切分到其他節(jié)點(diǎn),從分布式的整體來看它們是一個整體的表

垂直切分:一個數(shù)據(jù)庫由很多表構(gòu)成,每個表對應(yīng)不同的業(yè)務(wù),垂直切分是指按照業(yè)務(wù)將表進(jìn)行分類并分到不同的節(jié)點(diǎn)上,垂直拆分簡單明了,拆分規(guī)則明確,應(yīng)用程序模塊清晰、明確、容易整合,但是某個表的數(shù)據(jù)量達(dá)到一定程度后擴(kuò)展起來比較困難。

混合切分:水平切分和垂直切分的結(jié)合

3、分布式查詢處理

分布式查詢處理的任務(wù)就是把一個分布式數(shù)據(jù)庫上的高層次查詢映射為在本地數(shù)據(jù)庫上的操作,查詢的解析必須拆分為代數(shù)查詢的關(guān)系運(yùn)算序列,將要查詢的數(shù)據(jù)定位到各節(jié)點(diǎn),使得查詢在各節(jié)點(diǎn)進(jìn)行,最后通過網(wǎng)絡(luò)通信的操作匯聚查詢結(jié)果。

4、分布式并發(fā)控制

并發(fā)控制是分布式事務(wù)管理的基本任務(wù)之一,其目的是保證分布式數(shù)據(jù)庫中的多個事務(wù)并發(fā)高效、正確的執(zhí)行。并發(fā)控制用來保證事務(wù)的可串行性,也就是說事務(wù)的并發(fā)執(zhí)行等價于它們按某種次序的串行執(zhí)行,從而為用戶提供并發(fā)的透明性。進(jìn)行并發(fā)控制的方法主要有三種:加鎖并發(fā)控制、時間戳控制、樂觀并發(fā)控制。加鎖并發(fā)控制應(yīng)用廣泛,但是容易發(fā)生死鎖;時間戳控制消除了死鎖,一旦發(fā)生沖突變回重啟而不是等待,需要有全局的統(tǒng)一時鐘;樂觀并發(fā)控制對于沖突較少的系統(tǒng)較為合適,對于沖突多的系統(tǒng)則效率低下。

OLTP和OLAP

在互聯(lián)網(wǎng)時代,海量數(shù)據(jù)的存儲和訪問成為系統(tǒng)設(shè)計與使用的瓶頸,對于海量數(shù)據(jù)處理,按照使用場景,主要分為兩種類型:聯(lián)級事務(wù)處理(OLTP)和聯(lián)級分析處理(OLAP)。

聯(lián)級事務(wù)處理也稱為面向事務(wù)的處理系統(tǒng),其基本特征是原始數(shù)據(jù)可以立即傳送到計算中心進(jìn)行處理,在很短的時間內(nèi)給出處理結(jié)果。

聯(lián)級分析處理是指通過多維的方式對數(shù)據(jù)進(jìn)行分析、查詢和報表,可以同數(shù)據(jù)挖掘工具、統(tǒng)計分析工具配合使用,增強(qiáng)決策分析功能。

兩者之間的區(qū)別:


OLTP OLAP
系統(tǒng)功能 日常交易處理 統(tǒng)計、分析、報表
DB設(shè)計 面向?qū)崟r交易類應(yīng)用 面向統(tǒng)計分析類應(yīng)用
數(shù)據(jù)處理 當(dāng)前的,最新的細(xì)節(jié)的 歷史的、聚集的、多維的、集成的
實(shí)時性 實(shí)時讀寫要求高 實(shí)時讀寫要求低
事務(wù) 強(qiáng)一致性 弱事務(wù)
分析要求 低,簡單 高,復(fù)雜

關(guān)系型數(shù)據(jù)庫和NoSQL

關(guān)系型數(shù)據(jù)庫是建立在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫,其借助于集合代數(shù)等數(shù)學(xué)概念和方法來處理數(shù)據(jù)庫中的數(shù)據(jù),主流的是oracle,db2,sql server,mysql

NoSQL數(shù)據(jù)庫,全稱為Not Only SQL,意思就是適用關(guān)系型數(shù)據(jù)庫的時候就是用關(guān)系型數(shù)據(jù)庫,不適用的時候也沒必要非使用關(guān)系型數(shù)據(jù)庫不可,可以考慮更加合適的數(shù)據(jù)存儲,主要分為臨時性鍵值存儲(memcached,redis),永久性鍵值存儲(redis),面向文檔的數(shù)據(jù)庫(mongoDB,CouchDB),面向列的數(shù)據(jù)庫(Cassandra,HBase),每種NoSQL都有其特有的使用場景及優(yōu)點(diǎn)。


關(guān)系型數(shù)據(jù)庫 NoSQL數(shù)據(jù)庫
特點(diǎn) 數(shù)據(jù)關(guān)系模型基于關(guān)系模型,結(jié)構(gòu)化存儲,完整性約束
基于二維表及其之間的聯(lián)系,需要連接、并、交、差等操作
采用結(jié)構(gòu)化的查詢語言做數(shù)據(jù)讀寫
操作需要數(shù)據(jù)的一致性,需要事務(wù)甚至強(qiáng)一致性
非結(jié)構(gòu)化的存儲
基于多維關(guān)系模型
具有特色的使用場景
優(yōu)點(diǎn) 保證數(shù)據(jù)的一致性
可以進(jìn)行join等復(fù)雜查詢
通用化,技術(shù)成熟
高并發(fā)、大數(shù)據(jù)下讀寫能力強(qiáng)
支持分布式,易于擴(kuò)展,可伸縮
簡單,弱結(jié)構(gòu)化存儲
缺點(diǎn) 數(shù)據(jù)讀寫必須經(jīng)過sql解析,大量數(shù)據(jù)、高并發(fā)讀寫性能不足
對數(shù)據(jù)做讀寫,或修改數(shù)據(jù)結(jié)構(gòu)時需要加鎖,影響并發(fā)操作
無法適應(yīng)非結(jié)構(gòu)化存儲
擴(kuò)展困難
昂貴、復(fù)雜
join等復(fù)雜操作能力較弱
事務(wù)支持較弱
通用性差
無完整約束復(fù)雜業(yè)務(wù)場景支持較差

mycat的基本介紹

mycat是什么

Mycat 是什么?從定義和分類來看,它是一個開源的分布式數(shù)據(jù)庫系統(tǒng),是一個實(shí)現(xiàn)了 MySQL 協(xié)議的
Server,前端用戶可以把它看作是一個數(shù)據(jù)庫代理,用 MySQL 客戶端工具和命令行訪問,而其后端可以用
MySQL 原生(Native) 協(xié)議與多個 MySQL 服務(wù)器通信,也可以用 JDBC 協(xié)議與大多數(shù)主流數(shù)據(jù)庫服務(wù)器通信,
其核心功能是分表分庫,即將一個大表水平分割為 N 個小表,存儲在后端 MySQL 服務(wù)器里或者其他數(shù)據(jù)庫里。
Mycat 發(fā)展到目前的版本,已經(jīng)不是一個單純的 MySQL 代理了,它的后端可以支持 MySQL、 SQL Server、
Oracle、 DB2、 PostgreSQL 等主流數(shù)據(jù)庫,也支持 MongoDB 這種新型 NoSQL 方式的存儲,未來還會支持更
多類型的存儲。而在最終用戶看來,無論是那種存儲方式,在 Mycat 里,都是一個傳統(tǒng)的數(shù)據(jù)庫表,支持標(biāo)準(zhǔn)的
SQL 語句進(jìn)行數(shù)據(jù)的操作,這樣一來,對前端業(yè)務(wù)系統(tǒng)來說,可以大幅降低開發(fā)難度,提升開發(fā)速度,在測試階
段,可以將一個表定義為任何一種 Mycat 支持的存儲方式,比如 MySQL 的 MyASIM 表、內(nèi)存表、或者
MongoDB、 LevelDB 以及號稱是世界上最快的內(nèi)存數(shù)據(jù)庫 MemSQL 上。試想一下,用戶表存放在 MemSQL 上,大量讀頻率遠(yuǎn)超過寫頻率的數(shù)據(jù)如訂單的快照數(shù)據(jù)存放于 InnoDB 中,一些日志數(shù)據(jù)存放于 MongoDB 中,而且還能把 Oracle 的表跟 MySQL 的表做關(guān)聯(lián)查詢,你是否有一種不能呼吸的感覺?而未來,還能通過 Mycat 自動將一些計算分析后的數(shù)據(jù)灌入到 Hadoop 中,并能用 Mycat+Storm/Spark Stream 引擎做大規(guī)模數(shù)據(jù)分析,看
到這里,你大概明白了, Mycat 是什么? Mycat 就是 BigSQL, Big Data On SQL Database。

很多同學(xué)看到上面的描述之后,可能還是比較懵逼,不知道m(xù)ycat到底是個啥,下面我們來詳細(xì)講解下對于不同的角色,mycat到底是個啥?

對于DBA而言,可以這么理解mycat:

Mycat就是MySQL Server,而Mycat后面連接的MySQL Server,就好像是MySQL的存儲引擎,如InnoDB,MyISAM等,因此,Mycat本身并不存儲數(shù)據(jù),數(shù)據(jù)是再后端的MySQL上存儲的,因此數(shù)據(jù)可靠性以及事務(wù)都是MySQL保證的,簡單說,Mycat就是MySQL最佳伴侶,它再一定程度上讓MySQL擁有了能跟Oracle PK的能力。

對于軟件工程師來說,可以這么理解mycat:

Mycat就是一個近似等于MySQL的數(shù)據(jù)庫服務(wù)器,你可以用連接MySQL的方式去連接Mycat,除了端口不同,默認(rèn)的mycat端口是8066而不是mysql的3306,因此需要再連接字符串上增加端口信息,大多數(shù)情況下,可以用你熟悉的對象映射框架使用mycat,但建議對于分片表,盡量使用基礎(chǔ)的SQL語句,因為這樣能達(dá)到最佳性能,特別是幾千萬甚至幾百億條記錄的情況下。

對于架構(gòu)師來說,可以這么理解mycat:

mycat是一個強(qiáng)大的數(shù)據(jù)庫中間件,不僅僅可以用作讀寫分離、以及分庫分表、容災(zāi)備份,而且可以用于多租戶應(yīng)用開發(fā),云平臺基礎(chǔ)設(shè)施,讓你的架構(gòu)具備很強(qiáng)的適應(yīng)性和靈活性,借助于即將發(fā)布的mycat只能優(yōu)化模塊,系統(tǒng)的數(shù)據(jù)訪問瓶頸和熱點(diǎn)一目了然,根據(jù)這些統(tǒng)計分析數(shù)據(jù),你可以自動或手工調(diào)整后端存儲,將不同的表映射到不同的存儲引擎上,而整個應(yīng)用的代碼一行也不用改變。

mycat的原理

mycat的原理并不復(fù)雜,復(fù)雜的是代碼,如果代碼也不復(fù)雜,那么早就成為了一個傳說了。

mycat的原理中最重要的一個動作是“攔截”,它攔截了用戶發(fā)送過來的SQL語句,首先對SQL語句做了一些特定的分析:如分片分析、路由分析、讀寫分離分析、緩存分析等,然后將此SQL發(fā)送后端的真實(shí)數(shù)據(jù)庫,并將返回的結(jié)果做適當(dāng)?shù)奶幚恚罱K再返回給用戶。

mycat原理.png

上述圖片里,orders表被分為了三個分片datanode(簡稱dn),這三個分片是分布在兩臺MySQL Server上(Datahost),即datanode=database@datahost方式,因此你可以用一臺到N臺服務(wù)器來分片,分片規(guī)則為(sharding rule)典型的字符串枚舉分片規(guī)則,一個規(guī)則的定義是分片字段(sharding column)+分片函數(shù)(rule function),這里的分片字段為prov而分片函數(shù)為字符串枚舉方式。

當(dāng)mycat收到一個SQL時,會先解析這個SQL,查找涉及到的表,然后看此表的定義,如果有分片規(guī)則,則獲取到SQL里分片字段的值,并分配分片函數(shù),得到該SQL對應(yīng)的分片列表,然后將SQL發(fā)往這些分片去執(zhí)行,最后收集和處理所有分片返回的結(jié)果數(shù)據(jù),并輸出到客戶端,以select * from orders where prov = ?語句為例,查到prov=wuhan,按照分片函數(shù),wuhan返回dn1,于是sql就發(fā)給了mysql1,去取db1上的查詢結(jié)果,并返回給用戶。

如果上述sql改為select * from orders where prov in (wuhan,beijing),那么,sql就會發(fā)給MySQL1和MySQL2去執(zhí)行,然后結(jié)果集合并后輸出給用戶。但通常業(yè)務(wù)中我們的SQL會有order by以及l(fā)imit翻頁語法,此時就設(shè)計到結(jié)果集在mycat端的二次處理,這部分代碼也比較復(fù)雜,而最復(fù)雜的則屬兩個表的join,為此,mycat提出了創(chuàng)新性的ER分片,全局表,HBT(human brain tech)人工智能的catlet,以及結(jié)合storm/spark引擎等十八般武藝的解決辦法,從而稱為目前業(yè)界最強(qiáng)大的方案,這就是開源的力量。

應(yīng)用場景

mycat發(fā)展到現(xiàn)在,使用的場景已經(jīng)很豐富,而且不斷有新用戶給出新的創(chuàng)新性的方案,以下是典型的應(yīng)用場景:

1、單純的讀寫分離,此時配置最為簡單,支持讀寫分離,主從切換

2、分庫分表,對于超過1000萬的表進(jìn)行分片,最大支持1000億的單表分片

3、多租戶應(yīng)用,每個應(yīng)用一個庫,但應(yīng)用程序只連接mycat,從而不改造程序本身,實(shí)現(xiàn)多租戶化

4、報表系統(tǒng),借助mycat的分表能力,處理大規(guī)模報表的統(tǒng)計

5、整合多數(shù)據(jù)源

6、作為海量數(shù)據(jù)實(shí)時查詢的一種簡單有效方案,比如100億條頻繁查詢的記錄需要在3秒內(nèi)查詢出來結(jié)果,除了基于主鍵的查詢,還可能存在范圍查詢或其他屬性查詢,此時mycat可能是最簡單有效的選擇

7、數(shù)據(jù)庫路由器,mycat基于mysql實(shí)例的連接池復(fù)用機(jī)制,可以讓每一個應(yīng)用最大程度地共享一個mysql實(shí)例地所有連接池,讓數(shù)據(jù)庫地并發(fā)訪問能力大大提升

為什么使用mycat

1、java與數(shù)據(jù)庫緊耦合

2、高訪問量高并發(fā)對數(shù)據(jù)庫的壓力

3、讀寫請求數(shù)據(jù)不一致

數(shù)據(jù)庫中間件對比

對比項目 mycat mango cobar heisenberg altas amoeba
數(shù)據(jù)切片 支持 支持 支持 支持 支持 支持
讀寫分離 支持 支持 支持 支持 支持 支持
宕機(jī)自動切換 支持 不支持 支持 不支持 半支持,影響寫 不支持
mysql協(xié)議 前后端支持 JDBC 前端支持 前后端支持 前后端支持 JDBC
支持的數(shù)據(jù)庫 mysql,oracle,mongodb,postgresql mysql mysql mysql mysql mysql,mongodb
社區(qū)活躍度 活躍 停滯 中等 停滯
文檔資料 極豐富 較齊全 較齊全 較少 中等 缺少
是否開源 開源 開源 開源 開源 開源 開源
是否支持事務(wù) 弱XA 支持 單庫強(qiáng)一致,分布式弱事務(wù) 單庫強(qiáng)一致,多庫弱事務(wù) 單庫強(qiáng)一致,分布弱事務(wù) 不支持

mycat的核心概念

mycat是數(shù)據(jù)庫中間件,就是介于數(shù)據(jù)庫與應(yīng)用之間,進(jìn)行數(shù)據(jù)處理和交互的中間服務(wù)。從原有的一個庫,被切分為多個分片數(shù)據(jù)庫,所有的分片數(shù)據(jù)庫集群構(gòu)成了整個完整的數(shù)據(jù)庫存儲。

mycat架構(gòu).png

如上圖所示,數(shù)據(jù)被分到多個分片數(shù)據(jù)庫之后,應(yīng)用如果需要讀取數(shù)據(jù),就要處理多個數(shù)據(jù)源的數(shù)據(jù)。如果沒有數(shù)據(jù)庫中間件,那么應(yīng)用將直接面對分片集群,數(shù)據(jù)源切換、事務(wù)處理、數(shù)據(jù)聚合都需要應(yīng)用直接處理,原本該是專注于業(yè)務(wù)的應(yīng)用,將會話大量的工作來處理分片后的問題,最重要的是每個應(yīng)用處理將是完全的重復(fù)造輪子。

1、邏輯庫

對于實(shí)際應(yīng)用而言,其實(shí)并不需要知道中間件的存在,開發(fā)人員只需要知道數(shù)據(jù)庫的概念即可,所以數(shù)據(jù)庫中間件可以被看作是一個或多個數(shù)據(jù)庫集群構(gòu)成的邏輯庫。

在云計算時代,數(shù)據(jù)庫中間件可以以多租戶的形式給一個或多個應(yīng)用提供服務(wù),每個應(yīng)用訪問的可能是一個獨(dú)立或者共享的物理庫,常見的如阿里云數(shù)據(jù)庫服務(wù)器RDS

邏輯庫.png

2、邏輯表

既然有邏輯庫,那么就應(yīng)該有邏輯表,在分布式數(shù)據(jù)庫中,對應(yīng)用來說,讀寫數(shù)據(jù)的表就是邏輯表。邏輯表可以使數(shù)據(jù)切分后,分步在一個或多個分片庫中,也可以不做數(shù)據(jù)切分,不分片,只有一個表構(gòu)成

3、分片表

分片表,是指哪些原有的很大數(shù)據(jù)的表,需要切分到多個數(shù)據(jù)庫的表,這樣每一個分片都會有一部分?jǐn)?shù)據(jù),所有分片構(gòu)成了完整的數(shù)據(jù)。

4、非分片表

一個數(shù)據(jù)庫中并不是所有的表都很大,某些表是可以不用進(jìn)行切分的,非分片是相對分片表來說的,就是那些不需要進(jìn)行數(shù)據(jù)切分的表。

5、ER表

關(guān)系型數(shù)據(jù)庫是基于實(shí)體關(guān)系模型之上,通過其描述了真實(shí)世界中事物與關(guān)系,mycat中的ER表既是來源于此。根據(jù)這一思路,提出了基于ER關(guān)系的數(shù)據(jù)分片策略,子表的記錄與所關(guān)聯(lián)的父表記錄存放在同一個數(shù)據(jù)分片上,即子類依賴于父類,通過表分組保證數(shù)據(jù)join不會跨庫操作。

表分組是解決跨分片數(shù)據(jù)join的一種很好的思路,也是數(shù)據(jù)切分規(guī)劃的重要一條規(guī)則。

6、全局表

一個真實(shí)的業(yè)務(wù)系統(tǒng)中,往往存在大量的類似字典表的表,這些表基本上很少變動,字典表具有以下幾個特點(diǎn):

1、變動不頻繁

2、數(shù)據(jù)量總體變化不大

3、數(shù)據(jù)規(guī)模不大,很少有超過數(shù)十萬條記錄

對于這類的表,在分片的情況下,當(dāng)業(yè)務(wù)表因為規(guī)模而進(jìn)行分片以后,業(yè)務(wù)表與這些附屬的字典表之間的關(guān)聯(lián),就成了比較棘手的問題,所以mycat中通過數(shù)據(jù)冗余來解決這類表的join,即所有的分片都有一份數(shù)據(jù)的拷貝,所有將字典表或者符合字典表特性的一些表定義為全局表。

數(shù)據(jù)冗余是解決跨分片數(shù)據(jù)join的一種很好思路,也是數(shù)據(jù)切分規(guī)劃的另外一條重要原則

7、分片節(jié)點(diǎn)(dataNode)

數(shù)據(jù)切分后,一個大表被分到不同的分片數(shù)據(jù)庫上面,每個表分片所在的數(shù)據(jù)庫就是分片節(jié)點(diǎn)(dataNode)

8、節(jié)點(diǎn)主機(jī)(dataHost)

數(shù)據(jù)切分后,每個分片節(jié)點(diǎn)(dataNode)不一定都會獨(dú)占一臺機(jī)器,同一機(jī)器上面可以有多個分片數(shù)據(jù)庫,這樣一個或多個分片節(jié)點(diǎn)(dataNode)所在的機(jī)器就是節(jié)點(diǎn)主機(jī)(dataHost),為了規(guī)避單節(jié)點(diǎn)主機(jī)并發(fā)數(shù)限制,盡量將讀寫壓力高的分片節(jié)點(diǎn)(dataNode)均衡的放在不同的節(jié)點(diǎn)主機(jī)(dataHost)。

9、分片規(guī)則

數(shù)據(jù)切分是指一個大表被分成若干個分片表,就需要一定的規(guī)則,這樣按照某種規(guī)則把數(shù)據(jù)分到某個分片的規(guī)則就是分片規(guī)則,數(shù)據(jù)切分選擇合適的分片規(guī)則非常重要,將極大的避免后續(xù)數(shù)據(jù)處理的難度。

10、全局序列號

數(shù)據(jù)切分后,原有的關(guān)系數(shù)據(jù)庫中的主鍵約束在分布式條件下將無法使用,因此需要引入外部機(jī)制保證數(shù)據(jù)唯一性標(biāo)識,這種保證全局性的數(shù)據(jù)唯一標(biāo)識的機(jī)制就是全局序列號。

11、多租戶

多租戶技術(shù)或稱多重租賃技術(shù),是一種軟件架構(gòu)技術(shù),它是在探討與實(shí)現(xiàn)如何于多用戶的環(huán)境下共用相同的系統(tǒng)或程序組件,并且扔可確保各用戶間數(shù)據(jù)的隔離性。在云計算時代,多租戶技術(shù)在共用的數(shù)據(jù)中心以單一系統(tǒng)架構(gòu)與服務(wù)提供多數(shù)客戶端相同甚至可定制化的服務(wù),并且仍然可以保障客戶的數(shù)據(jù)隔離。目前各種各樣的云計算服務(wù)就是這類技術(shù)范疇,例如阿里云數(shù)據(jù)庫服務(wù)(RDS),阿里云服務(wù)器等等。

多租戶在數(shù)據(jù)存儲上存在三種主要的方案,分別是:

1、獨(dú)立數(shù)據(jù)庫

一個租戶一個數(shù)據(jù)庫,這種方案的用戶數(shù)據(jù)隔離級別最高,安全性最好,但成本也高。

優(yōu)點(diǎn):為不同的租戶提供獨(dú)立的數(shù)據(jù)庫,有助于簡化數(shù)據(jù)模型的擴(kuò)展設(shè)計,滿足不同租戶的獨(dú)特需求,如果出現(xiàn)故障,恢復(fù)數(shù)據(jù)比較簡單。

缺點(diǎn):增大了數(shù)據(jù)庫的安裝數(shù)量,隨之帶來維護(hù)成本和購置成本的增加

2、共享數(shù)據(jù)庫,隔離數(shù)據(jù)架構(gòu)

多個或者所有租戶共享database,但是每一個租戶一個schema

優(yōu)點(diǎn):為安全性要求較高的租戶提供了一定程度的邏輯數(shù)據(jù)隔離,并不是完全隔離;每個數(shù)據(jù)庫可以支持更多的租戶數(shù)量

缺點(diǎn):如果出現(xiàn)故障,數(shù)據(jù)恢復(fù)比較困難,因此恢復(fù)數(shù)據(jù)庫將牽扯到其他租戶的數(shù)據(jù),如果需要跨租戶統(tǒng)計數(shù)據(jù),存在一定困難

3、共享數(shù)據(jù)庫,共享數(shù)據(jù)結(jié)構(gòu)

租戶共享同一個database,同一個schema,但在表中通過tenantID區(qū)分租戶的數(shù)據(jù)。這是共享程度最高、隔離級別最低的模式

優(yōu)點(diǎn):維護(hù)和購置成本最低,運(yùn)行每個數(shù)據(jù)庫支持的租戶數(shù)量最多

缺點(diǎn):隔離級別最低,安全性最低,需要在設(shè)計開發(fā)時加大對安全的開發(fā)量,數(shù)據(jù)備份和恢復(fù)最困難,需要逐表逐條備份和還原。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。