常見(jiàn)問(wèn)題
分庫(kù)分表
對(duì)于海量數(shù)據(jù)葛虐,且有一定的并發(fā)量的分庫(kù)分表,絕不是引入某一個(gè)分庫(kù)分表中間件就能解決問(wèn)題棉钧,而是一項(xiàng)系統(tǒng)的工程屿脐。需要分析整個(gè)表相關(guān)的業(yè)務(wù),讓合適的中間件做它最擅長(zhǎng)的事情宪卿。例如有sharding column的查詢走分庫(kù)分表的诵,一些模糊查詢,或者多個(gè)不固定條件篩選則走es佑钾,海量存儲(chǔ)則交給HBase西疤。
做了這么多事情后,后面還會(huì)有很多的工作要做休溶,比如數(shù)據(jù)同步的一致性問(wèn)題代赁,還有運(yùn)行一段時(shí)間后,某些表的數(shù)據(jù)量慢慢達(dá)到單表瓶頸兽掰,這時(shí)候還需要做冷數(shù)據(jù)遷移芭碍。
參考文檔
https://www.cnblogs.com/twoheads/p/10715498.html
緩存
mysql
官方資料
https://dev.mysql.com/doc/refman/8.0/en/
整體架構(gòu)
SQL層的功能
select * from wordpress.user;
DDL 數(shù)據(jù)庫(kù)定義語(yǔ)言
DCL 數(shù)據(jù)庫(kù)控制語(yǔ)言
DML 數(shù)據(jù)庫(kù)操作語(yǔ)言
DQL 數(shù)據(jù)查詢語(yǔ)言
1、判斷語(yǔ)法孽尽、語(yǔ)句窖壕、語(yǔ)義
判斷語(yǔ)句類型 2、數(shù)據(jù)庫(kù)不能直接響應(yīng)sql語(yǔ)句
必須明確的知道數(shù)據(jù)在哪個(gè)磁盤(pán) 3杉女、數(shù)據(jù)庫(kù)對(duì)象授權(quán)情況判斷
授權(quán)失敗不繼續(xù)4瞻讽、解析(解析器)
將sql語(yǔ)句解析成執(zhí)行計(jì)劃,運(yùn)行執(zhí)行計(jì)劃熏挎,生成找數(shù)據(jù)的方式5速勇、優(yōu)化 (優(yōu)化器)
運(yùn)行執(zhí)行計(jì)劃
5.6之后 基于代價(jià)的算法,從執(zhí)行計(jì)劃中選擇代價(jià)最小的交給"執(zhí)行器"6坎拐、"執(zhí)行器" 運(yùn)行執(zhí)行計(jì)劃
最終生產(chǎn)如何去磁盤(pán)找數(shù)據(jù)方式7烦磁、將取數(shù)據(jù)的方式,交由下層(存儲(chǔ)引擎層)進(jìn)行處理8廉白、最終將取出的數(shù)據(jù)抽象成管理員或用戶能看懂的方式(表)个初,展現(xiàn)在用戶面前9乖寒、查詢緩存: 緩存之前查詢的數(shù)據(jù)猴蹂。
假如我們查詢的表是一個(gè)經(jīng)常有變動(dòng)的表,查詢緩存不要設(shè)置太大
存儲(chǔ)引擎
存儲(chǔ)引擎用于:
存儲(chǔ)數(shù)據(jù)楣嘁、檢索數(shù)據(jù)磅轻、通過(guò)索引查找數(shù)據(jù)
存儲(chǔ)介質(zhì)珍逸、 事務(wù)功能、 鎖定聋溜、備份和恢復(fù)谆膳、優(yōu)化
特殊功能:
全文搜索、引用完整性撮躁、空間數(shù)據(jù)處理
雙層處理
上層包括SQL解析器和優(yōu)化器漱病、下層包含一組存儲(chǔ)引擎
SQL 層不依賴于存儲(chǔ)引擎:
引擎不影響SQL處理
版本信息
1. MySQL Community Server 社區(qū)版本,開(kāi)源免費(fèi)把曼,但不提供官方技術(shù)支持杨帽。
2. MySQL Enterprise Edition 企業(yè)版本线脚,需付費(fèi)屹篓,可以試用30天。
3. MySQL Cluster 集群版斋否,開(kāi)源免費(fèi)叙赚±峡停可將幾個(gè)MySQL Server封裝成一個(gè)Server。
4. MySQL Cluster CGE 高級(jí)集群版震叮,需付費(fèi)胧砰。
5. MySQL Workbench(GUITOOL)一款專為MySQL設(shè)計(jì)的ER/數(shù)據(jù)庫(kù)建模工具。它是著名的數(shù)據(jù)庫(kù)設(shè)計(jì)工具DBDesigner4的繼任者苇瓣。MySQLWorkbench又分為兩個(gè)版本朴则,分別是社區(qū)版(MySQL Workbench OSS)、商用版(MySQL WorkbenchSE)钓简。
版本特性
功能
MySQL數(shù)據(jù)庫(kù)從5.7.8版本開(kāi)始乌妒,也提供了對(duì)JSON的支持。對(duì)比PG和mysql:
1. 在共有功能上外邓,pg比mysql要快一些
2. pg比mysql多一些操作json的函數(shù)
3. pg自定義函數(shù)功能比較強(qiáng)撤蚊,針對(duì)json操作可以較好地進(jìn)行模塊化開(kāi)發(fā),不一定要全部揉在一個(gè)sql里
4. pg支持函數(shù)索引损话,這樣可以對(duì)json中的某個(gè)值建立索引而不用在表上加減字段
選擇:
如果對(duì)json有頻繁的操作侦啸,而且需要復(fù)雜的操作,現(xiàn)階段來(lái)說(shuō)pg是你唯一的選擇
如果對(duì)json操作功能性要求比較少丧枪,并且對(duì)其操作的強(qiáng)度也不高光涂,建議選擇最熟悉的數(shù)據(jù)庫(kù)
一切都是發(fā)展的,說(shuō)不定未來(lái)mysql對(duì)json的支持會(huì)越來(lái)越好拧烦,所以如果沒(méi)必要忘闻,選擇自己/團(tuán)隊(duì)最熟悉的數(shù)據(jù)庫(kù)
pg的json和jsonb
從PostgreSQL 9.3開(kāi)始,json就成了postgres里的一種數(shù)據(jù)類型恋博。jsonb格式是json的二進(jìn)制形式齐佳,二者的區(qū)別在于json寫(xiě)入快私恬,讀取慢,jsonb寫(xiě)入慢炼吴,讀取快本鸣,但在操作上,二者是沒(méi)有區(qū)別的
(1)json存儲(chǔ)快硅蹦,使用慢荣德; 存的時(shí)候不做處理,使用時(shí)再解析
(2)jsonb存儲(chǔ)稍慢童芹,存儲(chǔ)時(shí)就做了解析命爬,使用時(shí)速度較快
(3)兩者的部分函數(shù)很相似,稍有區(qū)別
generate column辐脖, generated column是MySQL 5.7引入的新特性饲宛,所謂generated column,就是數(shù)據(jù)庫(kù)中這一列由其他列計(jì)算而得嗜价。
性能
在MySQL 5.7中艇抠,性能相關(guān)的改進(jìn)非常多,包括臨時(shí)表相關(guān)的性能改進(jìn)久锥、只讀事務(wù)的性能優(yōu)化家淤、連接建立速度的優(yōu)化和復(fù)制性能的改進(jìn)。
臨時(shí)表的性能改進(jìn)
MySQL 5.7 為了提高臨時(shí)表相關(guān)的性能瑟由,對(duì)臨時(shí)表相關(guān)的部分進(jìn)行了大幅修改絮重,包括引入新的臨時(shí)表空間;對(duì)于臨時(shí)表的DDL歹苦,不持久化相關(guān)表定義青伤;對(duì)于臨時(shí)表的DML,不寫(xiě)redo殴瘦,關(guān)閉change buffer等狠角。所有臨時(shí)表的改動(dòng),都基于以下兩個(gè)事實(shí) :
1.臨時(shí)表只在當(dāng)前會(huì)話中可見(jiàn)
2.臨時(shí)表的生命周期是當(dāng)前連接(MySQL宕機(jī)或重啟蚪腋,則當(dāng)前連接結(jié)束)
也就是說(shuō)丰歌,對(duì)于臨時(shí)表的操作,不需要其他數(shù)據(jù)一樣嚴(yán)格地進(jìn)行一致性保證屉凯。通過(guò)不持久化元信息立帖,避免寫(xiě)redo等方式,減少臨時(shí)表操作的IO悠砚,以提高臨時(shí)表操作的性能晓勇。
可用性
在線設(shè)置 復(fù)制的過(guò)濾規(guī)則 不再需要重啟MySQL,只需要停止SQL thread,修改完成以后宵蕉,啟動(dòng)SQL thread
在線修改buffer pool的大小
Online DDL MySQL 5.7支持重命名索引和修改varchar的大小酝静,這兩項(xiàng)操作在之前的版本中节榜,都需要重建索引或表
ALTER TABLE t1 ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(255);
在線開(kāi)啟GTID 羡玛,在之前的版本中,由于不支持在線開(kāi)啟GTID宗苍,用戶如果希望將低版本的數(shù)據(jù)庫(kù)升級(jí)到支持GTID的數(shù)據(jù)庫(kù)版本稼稿,需要先關(guān)閉數(shù)據(jù)庫(kù),再以GTID模式啟動(dòng)讳窟,所以導(dǎo)致升級(jí)起來(lái)特別麻煩让歼。MySQL 5.7以后,這個(gè)問(wèn)題不復(fù)存在
高可用方案
點(diǎn)擊鏈接進(jìn)入:高可用方案
mysql常見(jiàn)命令
索引
分布式事務(wù)
分布式數(shù)據(jù)庫(kù)中間件
參數(shù)理解
系統(tǒng)默認(rèn)參數(shù)
數(shù)據(jù)庫(kù)版本:mysql Ver 14.14 Distrib 5.7.27-30, for Linux (x86_64) using 6.2
事務(wù)隔離級(jí)別
tx_isolation | REPEATABLE-READ
transaction_isolation | REPEATABLE-READ
線程池大小
| thread_pool_size | 2 |
| thread_pool_stall_limit | 500
| thread_pool_high_prio_tickets | 4294967295 |
| thread_pool_idle_timeout | 60 | thread_pool_max_threads | 100000
binlog三種復(fù)制方式
二進(jìn)制binlog的格式有三種:
statement:基于sql的binlog丽啡,每條修改數(shù)據(jù)的sql都會(huì)保存到binlog里谋右。
row:基于行級(jí)別,記錄每一行數(shù)據(jù)的變化补箍,也就是將每一行數(shù)據(jù)的變化都記錄到binlog里改执,記錄非常詳細(xì)。
mixed:混合statement和row模式坑雅。
WAL
數(shù)據(jù)庫(kù)中間件
分類
主要是mysql proxy,Amoeba, mycat 和 shardding jdbc
Mysql proxy
MySQL讀寫(xiě)分離是指讓master處理寫(xiě)操作辈挂,讓slave處理讀操作,非常適用于讀操作量比較大的場(chǎng)景裹粤,可減輕master的壓力终蒂。
使用mysql-proxy實(shí)現(xiàn)mysql的讀寫(xiě)分離,mysql-proxy實(shí)際上是作為后端mysql主從服務(wù)器的代理遥诉,它直接接受客戶端的請(qǐng)求拇泣,對(duì)SQL語(yǔ)句進(jìn)行分析,判斷出是讀操作還是寫(xiě)操作矮锈,然后分發(fā)至對(duì)應(yīng)的mysql服務(wù)器上挫酿。
mysql-proxy是官方提供的mysql中間件產(chǎn)品可以實(shí)現(xiàn)負(fù)載平衡,讀寫(xiě)分離愕难,failover等
MySQL Proxy就是這么一個(gè)中間層代理早龟,簡(jiǎn)單的說(shuō),MySQL Proxy就是一個(gè)連接池猫缭,負(fù)責(zé)將前臺(tái)應(yīng)用的連接請(qǐng)求轉(zhuǎn)發(fā)給后臺(tái)的數(shù)據(jù)庫(kù)葱弟,并且通過(guò)使用lua腳本,可以實(shí)現(xiàn)復(fù)雜的連接控制和過(guò)濾猜丹,
從而實(shí)現(xiàn)讀寫(xiě)分離和負(fù)載平衡芝加。對(duì)于應(yīng)用來(lái)說(shuō),MySQL Proxy是完全透明的,應(yīng)用則只需要連接到MySQL Proxy的監(jiān)聽(tīng)端口即可藏杖。
當(dāng)然将塑,這樣proxy機(jī)器可能成為單點(diǎn)失效,但完全可以使用多個(gè)proxy機(jī)器做為冗余蝌麸,在應(yīng)用服務(wù)器的連接池配置中配置到多 個(gè)proxy的連接參數(shù)即可点寥。
Amoeba
下載地址: http://sourceforge.net/projects/amoeba/files/
Amoeba主要解決以下問(wèn)題:
a). 數(shù)據(jù)切分后復(fù)雜數(shù)據(jù)源整合
b). 提供數(shù)據(jù)切分規(guī)則并降低數(shù)據(jù)切分規(guī)則給數(shù)據(jù)庫(kù)帶來(lái)的影響
c). 降低數(shù)據(jù)庫(kù)與客戶端連接
d). 讀寫(xiě)分離路由
不足
a)、目前還不支持事務(wù)
b)来吩、暫時(shí)不支持存儲(chǔ)過(guò)程(近期會(huì)支持)
c)敢辩、不適合從amoeba導(dǎo)數(shù)據(jù)的場(chǎng)景或者對(duì)大數(shù)據(jù)量查詢的query并不合適(比如一次請(qǐng)求返回10w以上甚至更多數(shù)據(jù)的場(chǎng)合)
d)、暫時(shí)不支持分庫(kù)分表弟疆,amoeba目前只做到分?jǐn)?shù)據(jù)庫(kù)實(shí)例戚长,每個(gè)被切分的節(jié)點(diǎn)需要保持庫(kù)表結(jié)構(gòu)一致:
更多信息參考:http://www.reibang.com/p/4aec9f682509
shardding jdbc
http://www.reibang.com/writer#/notebooks/29164998/notes/54241036
Mycat
github地址:https://github.com/MyCATApache/Mycat-Server
依賴關(guān)系速閱覽:https://github.com/MyCATApache/Mycat-Server/blob/1.6/pom.xml
主要功能
一個(gè)徹底開(kāi)源的,面向企業(yè)應(yīng)用開(kāi)發(fā)的大數(shù)據(jù)庫(kù)集群
支持事務(wù)怠苔、ACID同廉、可以替代MySQL的加強(qiáng)版數(shù)據(jù)庫(kù)
一個(gè)可以視為MySQL集群的企業(yè)級(jí)數(shù)據(jù)庫(kù),用來(lái)替代昂貴的Oracle集群
一個(gè)融合內(nèi)存緩存技術(shù)柑司、NoSQL技術(shù)迫肖、HDFS大數(shù)據(jù)的新型SQL Server
結(jié)合傳統(tǒng)數(shù)據(jù)庫(kù)和新型分布式數(shù)據(jù)倉(cāng)庫(kù)的新一代企業(yè)級(jí)數(shù)據(jù)庫(kù)產(chǎn)品
一個(gè)新穎的數(shù)據(jù)庫(kù)中間件產(chǎn)品
原理
**MyCAT通過(guò)定義表的分片規(guī)則來(lái)實(shí)現(xiàn)分片,每個(gè)表格可以捆綁一個(gè)分片規(guī)則帜羊,每個(gè)分片規(guī)則指定一個(gè)分片字段并綁定一個(gè)函數(shù)咒程,來(lái)實(shí)現(xiàn)動(dòng)態(tài)分片算法 **
**1.Schema:邏輯庫(kù),與MySQL中的Database(數(shù)據(jù)庫(kù))對(duì)應(yīng)讼育,一個(gè)邏輯庫(kù)中定義了所包括的Table帐姻。 **
**2.Table:邏輯表,即物理數(shù)據(jù)庫(kù)中存儲(chǔ)的某一張表奶段,與傳統(tǒng)數(shù)據(jù)庫(kù)不同饥瓷,這里的表格需要聲明其所存儲(chǔ)的邏輯數(shù)據(jù)節(jié)點(diǎn)DataNode。在此可以指定表的分片規(guī)則痹籍。 **
**3.DataNode:MyCAT的邏輯數(shù)據(jù)節(jié)點(diǎn)呢铆,是存放table的具體物理節(jié)點(diǎn),也稱之為分片節(jié)點(diǎn)蹲缠,通過(guò)DataSource來(lái)關(guān)聯(lián)到后端某個(gè)具體數(shù)據(jù)庫(kù)上 **
4.DataSource:定義某個(gè)物理庫(kù)的訪問(wèn)地址棺克,用于捆綁到Datanode上
5、分片規(guī)則:前面講了數(shù)據(jù)切分线定,一個(gè)大表被分成若干個(gè)分片表娜谊,就需要一定的規(guī)則,這樣按照某種業(yè)務(wù)規(guī)則把數(shù)據(jù)分到某個(gè)分片的規(guī)則就是分片規(guī)則斤讥,數(shù)據(jù)切分選擇合適的分片規(guī)則非常重要纱皆,將極大的避免后續(xù)數(shù)據(jù)處理的難
優(yōu)勢(shì)
基于阿里開(kāi)源的Cobar產(chǎn)品而研發(fā),Cobar的穩(wěn)定性、可靠性派草、優(yōu)秀的架構(gòu)和性能以及眾多成熟的使用案例使得MYCAT一開(kāi)始就擁有一個(gè)很好的起點(diǎn)搀缠,站在巨人的肩膀上,我們能看到更遠(yuǎn)近迁。業(yè)界優(yōu)秀的開(kāi)源項(xiàng)目和創(chuàng)新思路被廣泛融入到MYCAT的基因中艺普,使得MYCAT在很多方面都領(lǐng)先于目前其他一些同類的開(kāi)源項(xiàng)目,甚至超越某些商業(yè)產(chǎn)品钳踊。
完全實(shí)現(xiàn)分布式事務(wù)衷敌,完全的支持分布式勿侯。
通過(guò)Mycat web(eye)完成可視化配置拓瞪,及智能監(jiān)控,自動(dòng)運(yùn)維助琐。
通過(guò)mysql 本地節(jié)點(diǎn)祭埂,完整的解決數(shù)據(jù)擴(kuò)容難度,實(shí)現(xiàn)自動(dòng)擴(kuò)容機(jī)制兵钮,解決擴(kuò)容難點(diǎn)蛆橡。
支持基于zookeeper的主從切換及Mycat集群化管理。
通過(guò)Mycat Balance 替代第三方的Haproxy掘譬,LVS等第三方高可用泰演,完整的兼容Mycat集群節(jié)點(diǎn)的動(dòng)態(tài)上下線。
接入Spark等第三方工具葱轩,解決數(shù)據(jù)分析及大數(shù)據(jù)聚合的業(yè)務(wù)場(chǎng)景睦焕。
通過(guò)Mycat智能優(yōu)化,分析分片熱點(diǎn)靴拱,提供合理的分片建議垃喊,索引建議,及數(shù)據(jù)切分實(shí)時(shí)業(yè)務(wù)建議
1.6版本架構(gòu)
基于spring鏈接主從模式的服務(wù)端
https://blog.csdn.net/kingmax54212008/article/details/83716753
索引
組合索引
遵循左相關(guān)原則袜炕,與最左邊關(guān)聯(lián)系最強(qiáng)為原則本谜。
舉例如下:
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
city VARCHAR(50) NOT NULL,
age INT NOT NULL
);
ALTER****TABLE mytable ADD****INDEX name_city_age (name(10),city,age);
如果分別在 usernname,city偎窘,age上建立單列索引乌助,讓該表有3個(gè)單列索引,查詢時(shí)和上述的組合索引效率也會(huì)大不一樣陌知,遠(yuǎn)遠(yuǎn)低于我們的組合索引他托。雖然此時(shí)有了三個(gè)索引,但MySQL只能用到其中的那個(gè)它認(rèn)為似乎是最有效率的單列索引纵诞。
建立這樣的組合索引上祈,其實(shí)是相當(dāng)于分別建立了下面三組組合索引:
usernname,city,age
usernname,city
usernname
相關(guān)參考:
https://blog.csdn.net/weixin_42181824/article/details/82261988
https://baijiahao.baidu.com/s?id=1615219189673304134&wfr=spider&for=pc
secondary index
除了聚簇索引之外的其他索引類型都屬于二級(jí)索引。在Innodb中,二級(jí)索引的每行數(shù)據(jù)都包含這條數(shù)據(jù)的主鍵列登刺,還有二級(jí)索引指定的列籽腕;聚簇索引中,innodb通過(guò)主鍵值來(lái)查找數(shù)據(jù)行纸俭。
mysql索引回表概念
(1)先通過(guò)普通索引(普通索引皇耗,唯一索引,組合索引)定位到主鍵值揍很;
(2)在通過(guò)聚集索引定位到行記錄郎楼;
這就是所謂的回表查詢,先定位主鍵值窒悔,再定位行記錄呜袁,然后根據(jù)行記錄數(shù)主鍵id掃描索引數(shù),查詢出數(shù)據(jù)简珠,它的性能較掃一遍索引樹(shù)更低
舉例說(shuō)明:當(dāng)有一個(gè)表有四個(gè)字段阶界,分別是id、name聋庵,age膘融、address四個(gè)字段,將id設(shè)置為主鍵索引祭玉,將name和age設(shè)置為組合索引
查詢語(yǔ)句如下:
select name, age, address from table where name = xxx and age = xxx
得出結(jié)論如下:根據(jù)組合索引規(guī)范氧映,最左原則和用法,其實(shí)組合索引用到了脱货。但是address字段沒(méi)有建立索引岛都,根據(jù)已經(jīng)通過(guò)索引查詢出的記錄的主鍵id,根據(jù)主鍵id在去遍歷索引樹(shù)獲取數(shù)據(jù)蹭劈,這個(gè)過(guò)程就叫做回表疗绣。
如果查詢語(yǔ)句變化下:
select id, name, age from table where name = xxx and age = xxx
得出結(jié)論如下:因?yàn)閕d已經(jīng)有索引,所以不需要回表铺韧,那么這就是覆蓋索引多矮。
索引優(yōu)化
全值匹配心上人(這是基本原則),最左前綴要遵行(聯(lián)合索引一般都圍繞最左前綴優(yōu)化)哈打;
帶頭大哥活才行(聯(lián)合索引從最左邊字段開(kāi)始使用)塔逃,中間兄弟規(guī)矩行(不能跳過(guò)中間的字段,跳過(guò)后索引無(wú)效)料仗;
索引列上少計(jì)算(索引列上盡量不要進(jìn)行計(jì)算)湾盗,范圍之后全完蛋(where后面使用范圍查詢的之后的索引無(wú)效);
like百分最右寫(xiě)(%號(hào)寫(xiě)最右邊立轧,寫(xiě)左邊會(huì)導(dǎo)致索引失效)格粪,覆蓋索引別寫(xiě)星(盡量避免select*這樣的語(yǔ)句躏吊,能寫(xiě)索引列最好);
空值不等還有or帐萎,索引失效最無(wú)情(is null比伏,is not null,!=疆导,<>赁项,or會(huì)導(dǎo)致索引無(wú)效);
https://blog.csdn.net/yhl_jxy/article/details/88636685
更全面的
http://www.reibang.com/p/21c9a9ee7a90
索引執(zhí)行
從源碼來(lái)看
https://blog.csdn.net/vipshop_fin_dev/article/details/79688717
分布式事務(wù)
協(xié)議
分布式基礎(chǔ)協(xié)議:CAP澈段, BASE
分布式事務(wù)協(xié)議或框架:XA悠菜,TCC,saga败富,本地消息表+最終一致性
XA協(xié)議
XA是一個(gè)分布式事務(wù)協(xié)議悔醋,由Tuxedo提出。XA中大致分為兩部分:事務(wù)管理器和本地資源管理器
分為兩個(gè)協(xié)議: 兩階段協(xié)議和三階段協(xié)議
三階段協(xié)議.
相比于兩階段的優(yōu)勢(shì):
- 協(xié)調(diào)器和參與者加入了超時(shí)機(jī)制
2. 準(zhǔn)備階段拆分為兩階段囤耳,防止參與者在準(zhǔn)備后發(fā)生奔潰無(wú)法知曉是否提交或回滾的不確定狀態(tài)所引起的延時(shí)和數(shù)據(jù)不一致問(wèn)題篙顺。
- 在precommit階段等待超時(shí)后會(huì)直接提交偶芍,解決了二階段單點(diǎn)故障后一直等待占用資源的問(wèn)題充择。
遺留的問(wèn)題:
當(dāng)?shù)谌齻€(gè)階段準(zhǔn)備發(fā)起abort時(shí),事務(wù)協(xié)調(diào)器出現(xiàn)故障匪蟀,會(huì)導(dǎo)致數(shù)據(jù)不一致
相關(guān)參考
https://www.cnblogs.com/cxxjohnson/p/9145548.html
存儲(chǔ)引擎
常見(jiàn)引擎:XtraDB MyISAM InnoDB NDB
XtraDB
優(yōu)點(diǎn):
可擴(kuò)展性:處理更多事務(wù)椎麦;在強(qiáng)大的服務(wù)器上進(jìn)行擴(kuò)展
性能:使用了XtraDB的Percona Server速度非常快材彪,事務(wù)處理能力是innodb的2.7倍观挎。
可靠性:避免損壞,提供崩潰安全(crash-safe)復(fù)制
管理:在線備份段化,在線表格導(dǎo)入/導(dǎo)出
診斷:高級(jí)分析和檢測(cè)
靈活性:可變的頁(yè)面大小嘁捷,改進(jìn)的緩沖池管理
產(chǎn)品Percona 和MariaDB
percona開(kāi)發(fā)了xtraDB存儲(chǔ)引擎。mariaDB使用了XtraDb显熏,同時(shí)也提供myisam和innodb雄嚣,是mysql的替代品,由mysql的創(chuàng)建者M(jìn)onty Widenius成立一個(gè)家非盈利公司維護(hù)喘蟆,公司由產(chǎn)品驅(qū)動(dòng)缓升,后續(xù)的發(fā)展具有不可確定性。
MariaDB
另一款提供了XtraDB存儲(chǔ)引擎的產(chǎn)品是MariaDB產(chǎn)品蕴轨。它與Percona產(chǎn)品非常類似港谊,但是提供了更多底層代碼更改,試圖提供比標(biāo)準(zhǔn)MySQL更多的性能改進(jìn)橙弱。MariaDB直接利用來(lái)自Percona的XtraDB引擎歧寺,由于它們使用的是完全相同的引擎燥狰,因此每次使用存儲(chǔ)引擎時(shí)沒(méi)有顯著的差別。
產(chǎn)品Drizzle
mysql的一分支斜筐,對(duì)mysql做了重大修改
語(yǔ)言從c到c++的變更
完全開(kāi)源
價(jià)格是mysql 的一半碾局,目標(biāo)云市場(chǎng)
瞄準(zhǔn)高可用,修改一些已知的bug