阿里云alisql數(shù)據(jù)庫(kù)軟件功能
AliSQL增加了很多監(jiān)控指標(biāo),以幫助用戶或者DBA更了解自己的數(shù)據(jù)庫(kù),
SQL維度:增加每個(gè)SQL執(zhí)行的開銷統(tǒng)計(jì),除了響應(yīng)時(shí)間,鎖等待等,還包括邏輯讀,物理讀,臨時(shí)空間使用等
對(duì)象維度:阿里云alisql數(shù)據(jù)庫(kù)中文版增加了每個(gè)表的DML次數(shù),索引的使用情況,幫助用戶理解業(yè)務(wù)和索引使用效率。
事務(wù)維度:增加了每個(gè)事務(wù)持續(xù)的時(shí)間,和操作的對(duì)象。幫助用戶定位問題
線程維度:增加了線程的內(nèi)存使用統(tǒng)計(jì)
游戲行業(yè):我們?cè)趐roxy這一層進(jìn)行了AliSQL的橋接認(rèn)證,提供防閃斷功能。
物聯(lián)網(wǎng)行業(yè):AliSQL集成了TokuDB引擎,提供高壓縮比和大吞吐寫能力。
金融行業(yè):AliSQL定制了多通道的半同步策略,以及一主兩備的三機(jī)房零數(shù)據(jù)丟失的數(shù)據(jù)保護(hù)級(jí)別。
阿里云alisql數(shù)據(jù)庫(kù)軟件特色
阿里云alisql數(shù)據(jù)庫(kù)與其他產(chǎn)品的關(guān)系、各自特點(diǎn)如下:
阿里云是開源組織 WebScaleSQL 的第五位成員,與Facebook、Google、Twitter和LinkedIn團(tuán)隊(duì)共同研發(fā)WebScaleSQL,同時(shí),阿里巴巴還擁有OceanBase 自研數(shù)據(jù)庫(kù)。AliSQL、WebScaleSQL、OceanBase三者的關(guān)系和各自的特點(diǎn)
OceanBase是Alibaba集團(tuán)自研的分布式數(shù)據(jù)庫(kù),經(jīng)歷了集團(tuán)業(yè)務(wù)的洗禮,具有通用性,高擴(kuò)展能力。
WebScaleSQL是由這五家公司發(fā)起的基于MySQL官方的一個(gè)分支,旨在解決大家在互聯(lián)網(wǎng)業(yè)務(wù)上遇到的問題,是五個(gè)成員公司將各自足夠通用的功能提交到一起的集合,每家公司的研發(fā)同學(xué)都可以提交代碼。實(shí)際上每個(gè)公司自己生產(chǎn)環(huán)境使用的是自己維護(hù)的一個(gè)分支,因?yàn)槊總€(gè)公司都有自己定制化的需求。
AliSQL同樣基于MySQL官方版本,汲取了官方和社區(qū)的技術(shù)紅利,具有很高的性能和穩(wěn)定性,并適應(yīng)不同行業(yè)的特點(diǎn)進(jìn)行了定制。AliSQL的改進(jìn)方向主要集中在安全性、穩(wěn)定性、性能、新功能等方面。
AliSQL是經(jīng)過幾年的生產(chǎn)環(huán)境、幾萬個(gè)用戶實(shí)例的實(shí)際業(yè)務(wù)錘煉的。
AliSQL的一些定制化功能都是為了解決DBA維護(hù)、業(yè)務(wù)使用中碰到的實(shí)際問題。比如5.5以上的版本由于有metadata lock,DBA對(duì)表加字段等操作可能導(dǎo)致阻塞查詢,進(jìn)而導(dǎo)致整庫(kù)不可服務(wù)。我們新增alter ..wait N ..方法,保證了操作的安全性。再比如通過提供 set rds_reset_connection這樣的語(yǔ)句,解決了長(zhǎng)連接占用資源和短連接性能問題的矛盾。
AliSQL與電商行業(yè)、秒殺場(chǎng)景電商行業(yè)的環(huán)境,其實(shí)提供了一個(gè)非常綜合的場(chǎng)景,在擴(kuò)展性、穩(wěn)定性、性能等方面對(duì)數(shù)據(jù)庫(kù)都提出了非常高的要求,AliSQL就是順應(yīng)著這樣的要求進(jìn)行的定制版本。比如應(yīng)對(duì)大量應(yīng)用集群的線程池功能,秒殺場(chǎng)景的排隊(duì)功能,以及sql的限流功能。
比如大寫入量備庫(kù)延遲,AliSQL提供的基于表的并行復(fù)制功能。 又比如結(jié)構(gòu)化數(shù)據(jù)的壓縮功能等。
電商的秒殺場(chǎng)景,其實(shí)就是減庫(kù)存,對(duì)數(shù)據(jù)庫(kù)而言,就是對(duì)一條記錄的更新,因?yàn)槭聞?wù)的特點(diǎn),單條記錄的更新必須串行完成,但秒殺的特點(diǎn),就是在某個(gè)時(shí)刻,大量的并發(fā)進(jìn)行減庫(kù)存,這就造成了大量的線程因獲取不到鎖而處在死鎖檢測(cè)狀態(tài),消耗了大量的CPU資源,最終導(dǎo)致系統(tǒng)無法響應(yīng),而引起雪崩效應(yīng)。
AliSQL針對(duì)這樣的場(chǎng)景,提供了排隊(duì)和限流的功能,經(jīng)過了雙11零點(diǎn)時(shí)刻高并發(fā)請(qǐng)求的考驗(yàn),保持了系統(tǒng)的穩(wěn)定性和持續(xù)吞吐能力。
阿里云alisql數(shù)據(jù)庫(kù)使用說明
提供用于直接從Java使用MySQL Cluster的類和接口。
該軟件包包含三類主要的類和接口:
自舉類
在應(yīng)用程序中使用的接口
定義異常的類
主要接口
ClusterJ提供了以下供應(yīng)用程序使用的主要接口:{@link com.mysql.clusterj.SessionFactory},{@ link com.mysql.clusterj.Session},{@ link com.mysql.clusterj.Transaction},{@ link com.mysql.clusterj.query.QueryBuilder}和{@link com.mysql.clusterj.Query}。
自舉
幫助器類{@link com.mysql.clusterj.ClusterJHelper}包含用于創(chuàng)建{@link com.mysql.clusterj.SessionFactory}的方法。 引導(dǎo)程序是識(shí)別MySQL群集并獲取供該群集使用的SessionFactory的過程。每個(gè)Java VM每個(gè)群集有一個(gè)SessionFactory。
會(huì)話工廠
{@link com.mysql.clusterj.SessionFactory}是通過屬性配置的,這些屬性標(biāo)識(shí)應(yīng)用程序連接到的MySQL群集:
com.mysql.clusterj.connectstring標(biāo)識(shí)ndb_mgmd主機(jī)名和端口
com.mysql.clusterj.connect.retries是連接時(shí)的重試次數(shù)
com.mysql.clusterj.connect.delay是兩次重試之間的延遲(以秒為單位)
com.mysql.clusterj.connect.verbose告訴是否在連接時(shí)向System.out顯示消息
com.mysql.clusterj.connect.timeout.before是第一個(gè)節(jié)點(diǎn)響應(yīng)連接請(qǐng)求之前要等待的秒數(shù)
com.mysql.clusterj.connect.timeout.after是最后一個(gè)節(jié)點(diǎn)響應(yīng)連接請(qǐng)求之前要等待的秒數(shù)
com.mysql.clusterj.connect.database是要使用的數(shù)據(jù)庫(kù)的名稱
File propsFile = new File(“ clusterj.properties”);
InputStream inStream =新的FileInputStream(propsFile);
屬性props = new Properties();
props.load(inStream);
SessionFactory sessionFactory = ClusterJHelper.getSessionFactory(props);屆會(huì)
{@link com.mysql.clusterj.Session}表示用戶與集群的單獨(dú)連接。它包含以下方法:
通過主鍵查找持久實(shí)例
持久實(shí)例工廠(newInstance)
持久實(shí)例生命周期管理(持久,刪除)
獲取QueryBuilder
獲取交易(currentTransaction)
會(huì)話會(huì)話= sessionFactory.getSession();
現(xiàn)有員工= session.find(Employee.class,1);
if(existing!= null){session.remove(現(xiàn)有);}
雇員newemp = session.newInstance(Employee.class);
newemp.initialize(2,“ Craig”,15,146000.00);
session.persist(newemp);
交易
{@link com.mysql.clusterj.Transaction}允許用戶將多個(gè)操作組合到單個(gè)數(shù)據(jù)庫(kù)事務(wù)中。它包含以下方法:
開始工作
提交工作單元中的更改
回滾自工作單元開始以來所做的所有更改
將工作單元標(biāo)記為僅回滾
獲取當(dāng)前工作單元的回滾狀態(tài)
交易tx = session.currentTransaction();
tx.begin();
現(xiàn)有員工= session.find(Employee.class,1);
雇員newemp = session.newInstance(Employee.class);
newemp.initialize(2,“ Craig”,146000.00);
session.persist(newemp);
tx.commit();
QueryBuilder
{@link com.mysql.clusterj.query.QueryBuilder}允許用戶構(gòu)建查詢。它包含以下方法:
定義要查詢的域?qū)ο竽P?
使用以下命令將屬性與參數(shù)進(jìn)行比較:
等于少于比...更棒小于等于更大等于之間在
使用“和”,“或”和“非”運(yùn)算符組合比較
阿里云alisql數(shù)據(jù)庫(kù)更新日志
1.修正了其它bug;
2.優(yōu)化了軟件的兼容性。