Atlas 分布式版重磅來(lái)襲_Access數(shù)據(jù)庫(kù)教程
推薦:詳解數(shù)據(jù)庫(kù)高可用架構(gòu)之路數(shù)據(jù)庫(kù)高可用架構(gòu)對(duì)于我們這些應(yīng)用端開(kāi)發(fā)的人來(lái)說(shuō)是一個(gè)比較陌生的領(lǐng)域,是在具體的數(shù)據(jù)庫(kù)產(chǎn)品之上搭建的環(huán)境,需要像DBA這樣對(duì)數(shù)據(jù)庫(kù)產(chǎn)品有足夠的了解才能有所涉及,雖然不能深入其中,但可以通過(guò)一些經(jīng)典的高可用架構(gòu)學(xué)習(xí)其中的思想。就我所了解到的有以下幾種: MyS
Atlas 是由 Qihoo 360公司W(wǎng)eb平臺(tái)部基礎(chǔ)架構(gòu)團(tuán)隊(duì)開(kāi)發(fā)維護(hù)的一個(gè)基于MySQL協(xié)議的數(shù)據(jù)中間層項(xiàng)目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基礎(chǔ)上,修改了大量bug,添加了很多功能特性。目前該項(xiàng)目在360公司內(nèi)部得到了廣泛應(yīng)用,很多MySQL業(yè)務(wù)已經(jīng)接入了Atlas平臺(tái),每天承載的讀寫(xiě)請(qǐng)求數(shù)達(dá)幾十億條。同時(shí),有超過(guò)50家公司在生產(chǎn)環(huán)境中部署了Atlas,超過(guò)800人已加入了我們的開(kāi)發(fā)者交流群,并且這些數(shù)字還在不斷增加。
主要功能:
1.讀寫(xiě)分離
2.從庫(kù)負(fù)載均衡
3.IP過(guò)濾
4.自動(dòng)分表
5.DBA可平滑上下線DB
6.自動(dòng)摘除宕機(jī)的DB
Atlas Sharding 簡(jiǎn)介
Atlas Sharding是Atlas最近重點(diǎn)開(kāi)發(fā)的一個(gè)功能, 此功能增加了Mysql的橫向擴(kuò)展性跟容量, 可以滿足大部分企業(yè)的需求. 目前已經(jīng)在github上以Sharding分支發(fā)布.
Sharding 的基本思想就是把一個(gè)數(shù)據(jù)表中的數(shù)據(jù)切分成多個(gè)部分, 存放到區(qū)別的主機(jī)上去(切分的策略有多種), 從而緩解單臺(tái)機(jī)器的性能跟容量的問(wèn)題. sharding是一種水平切分, 適用于單表數(shù)據(jù)龐大的情景. 目前atlas支持靜態(tài)的sharding方案, 暫時(shí)不支持?jǐn)?shù)據(jù)的自動(dòng)遷移.
Atlas以表為單位sharding, 同一個(gè)數(shù)據(jù)庫(kù)內(nèi)可以同時(shí)共有sharding的表與不sharding的表, 不sharding的表數(shù)據(jù)存在未sharding的數(shù)據(jù)庫(kù)組中.
目前Atlas sharding支持insert, delete, select, update語(yǔ)句, 支持不跨shard的事務(wù).
當(dāng)然, 由于Mysql分布式的局限性, Atlas Sharding對(duì)于SQL的特性支持也是有限的, 但是應(yīng)付日常的需求, 已經(jīng)足夠了.
和Mysql replication的不同
MySQL主從復(fù)制就是將一個(gè)MySQL實(shí)例(Master)中的數(shù)據(jù)實(shí)時(shí)復(fù)制到另一個(gè)MySQL實(shí)例(slave)中,這個(gè)復(fù)制是一個(gè)異步復(fù)制的過(guò)程。
數(shù)據(jù)復(fù)制有以下一些特點(diǎn):
數(shù)據(jù)分布
負(fù)載平衡(需要借助Atlas或者其他proxy中間件)
備份
高可用性(high availability)與容錯(cuò)
復(fù)制的局限性很明顯, 當(dāng)數(shù)據(jù)庫(kù)寫(xiě)入頻繁, 但讀取操作少的場(chǎng)景下, 復(fù)制就不適合了, 當(dāng)寫(xiě)入過(guò)于頻繁,很難由一臺(tái)主機(jī)支撐的時(shí)候,我們還是會(huì)面臨到擴(kuò)展瓶頸。換句話說(shuō)就是復(fù)制只能擴(kuò)展讀性能, 但是對(duì)于寫(xiě)性能的擴(kuò)展是無(wú)能為力的.
數(shù)據(jù)切分(sharding): 通過(guò)某種特定的條件,將我們存放在同一個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)分散存放到多個(gè)數(shù)據(jù)庫(kù)(主機(jī))上面,以達(dá)到分散單臺(tái)設(shè)備負(fù)載的效果。這樣當(dāng)寫(xiě)入的時(shí)候, IO就被各個(gè)shard所分擔(dān)了. 同時(shí), 在每一個(gè)Shard上也是可以有復(fù)制存在的, 借助Atlas還是能在Shard上做讀分離, 所以復(fù)制跟Sharding完全是互相補(bǔ)充, 不排斥的.
Sharding 架構(gòu)

Atlas是無(wú)狀態(tài)的, 對(duì)于后端的多個(gè)組, 可以配置任意多個(gè)Atlas實(shí)例, 這一點(diǎn)和MongoDB的mongos類似.
Sharding數(shù)據(jù)庫(kù)組
在Atlas中, 將一個(gè)組看做是數(shù)據(jù)存儲(chǔ)的單位, 一個(gè)組由一臺(tái)master, 零臺(tái)或者多臺(tái)slave組成(mysql主從同步需要由用戶自己配置). 每個(gè)組之間的數(shù)據(jù)獨(dú)立, 沒(méi)關(guān)于系, 表的數(shù)據(jù)的各個(gè)部分存儲(chǔ)在各個(gè)組中.
組內(nèi)讀寫(xiě)分離
Atlas sharding也支持組內(nèi)的讀寫(xiě)分離, 也就是說(shuō)Atlas在命中了某個(gè)組之后, 還是會(huì)對(duì)這個(gè)組內(nèi)的master與slave執(zhí)行讀寫(xiě)分離(讀發(fā)送到slave, 寫(xiě)發(fā)送到master).
Sharding 數(shù)據(jù)切分策略
shard key
每一個(gè)shard table都有一個(gè)shard key, 其可以是主鍵, 也可以是非主鍵, 但是這個(gè)列必須是一個(gè)整數(shù). Atlas會(huì)利用這個(gè)shard key來(lái)判斷應(yīng)該把這條記錄存放到哪一個(gè)數(shù)據(jù)庫(kù)組中.
現(xiàn)在Atlas Shardingh支持兩種類型的數(shù)據(jù)切分: Range方式與Hash方式.
Range 方式

如上圖中, shard Key范圍在0-1000的數(shù)據(jù)存放在DbGroup0中, 范圍在1000-2000的數(shù)據(jù)存放在DbGroup1中, 2000-MaxInt 的數(shù)據(jù)存放在DbGroup2 中. 這些范圍的大小不需要相同.比如id為shard key的話, sql: "select * from test where id = 1500;", Atlas會(huì)將此語(yǔ)句發(fā)往DbGroup1. 暫時(shí)Atlas的range是靜態(tài)的, 不支持動(dòng)態(tài)的增加范圍.
優(yōu)點(diǎn):
對(duì)于range的sql查詢?nèi)?where id > 100 or id < 1000), range方式的sharding可以精確的命中后端的數(shù)據(jù)組, 不需要將sql發(fā)到各個(gè)mysql去請(qǐng)求數(shù)據(jù), 節(jié)約了網(wǎng)絡(luò)傳輸?shù)南?
缺點(diǎn)
如果shard key是遞增的, 那么可能會(huì)在一段時(shí)間內(nèi)的所有sql都命中到同一個(gè)數(shù)據(jù)組, 沒(méi)有體現(xiàn)出sharding的優(yōu)勢(shì), range不適用于這種場(chǎng)景.
適用場(chǎng)景
range適用于對(duì)范圍查詢有大量需求, 并且shard key相對(duì)離散插入的情景
hash 方式

目前Atlas使用取模的方式實(shí)現(xiàn)Hash, 也就是說(shuō)Hash(id) = id % dbgroup_count, 如id = 10, id % 3 = 1, 所以會(huì)命中到DbGroup1中.
優(yōu)缺點(diǎn)
hash跟range方式是恰好相反的, hash 可以應(yīng)對(duì)數(shù)據(jù)遞增的情景, 即使是在遞增的情況下, sharding的數(shù)據(jù)也是均勻分布在各個(gè)數(shù)據(jù)組內(nèi)的, 但是其缺點(diǎn)就是對(duì)于范圍的查詢通常都需要查詢所有的dbgroup, 網(wǎng)絡(luò)的消耗比較大.
適用場(chǎng)景
hash 適用于shard key順序增長(zhǎng), 并對(duì)范圍查詢的需求比較小的情景
有關(guān)支持的語(yǔ)句
Atlas sharding只對(duì)sql語(yǔ)句提供有限的支持, 目前支持基本的Select, insert/replace, delete, update語(yǔ)句, 支持全部的Where語(yǔ)法, 但是對(duì)于以下語(yǔ)句, 如果語(yǔ)句命中了多臺(tái)dbgroup, Atlas均未做支持(如果語(yǔ)句只命中了一個(gè)dbgroup, 如select count(*) from test where id < 1000, 其中dbgroup0范圍是0 - 1000, 那么這些特性都是支持的)
Limit Offset(支持Limit)
Order by
Group by
Join
ON
Count, Max, Min等函數(shù)
這些語(yǔ)句Atlas會(huì)返回"ERROR 1105 (HY000): Proxy Warning - Sharing Hit Multi Dbgroup Not Support SQL"錯(cuò)誤. 請(qǐng)不要在Sharding的表上使用這些特性, 如果對(duì)這種特性有需求請(qǐng)不要讓此表sharding.
注意:
子查詢?cè)赟harding中可能會(huì)返回不正確的結(jié)果, 也請(qǐng)不要使用子查詢. 請(qǐng)把語(yǔ)句拆分成多句執(zhí)行
對(duì)于寫(xiě)操作, 如果寫(xiě)操作命中了多個(gè)數(shù)據(jù)庫(kù)組, 由于部分成功(某個(gè)組執(zhí)行失敗)需要回滾的問(wèn)題, 暫時(shí)不支持寫(xiě)操作命中多個(gè)數(shù)據(jù)組的語(yǔ)句.請(qǐng)拆分成多個(gè)sql語(yǔ)句執(zhí)行.
Atlas可能會(huì)在接下來(lái)的版本中對(duì)其中的一些特性中做出支持.
有關(guān)事務(wù)支持
分享:SQL編程之高級(jí)查詢及注意事項(xiàng)1.什么是子查詢? 當(dāng)一個(gè)查詢是另一個(gè)查詢的條件時(shí),稱之為子查詢。子查 詢可以使用幾個(gè)簡(jiǎn)單命令構(gòu)造功能強(qiáng)大的復(fù)合命令。子查詢最常用于SELECT-SQL命令的 WHERE子句中。子查詢是一個(gè) SELECT 語(yǔ)句,它嵌套在一個(gè) SELECT、SELECT...INTO 語(yǔ)句、INSERT...INTO 語(yǔ)句、DELET
- 詳解數(shù)據(jù)庫(kù)高可用架構(gòu)之路
- SQL編程之高級(jí)查詢及注意事項(xiàng)
- 圖解SQL Server 2008安裝和配置過(guò)程
- 錯(cuò)誤和數(shù)據(jù)庫(kù)事件觸發(fā)
- Access 2007“設(shè)計(jì)”功能使用教程
- Access2007基礎(chǔ)教程:5步驟設(shè)計(jì)方法
- Access-宏的特點(diǎn)介紹
- Windows2008 64位IIS7+ACCESS數(shù)據(jù)庫(kù)無(wú)法打開(kāi)Asp頁(yè)面
- Access教程 怎樣設(shè)置自動(dòng)編號(hào)從1開(kāi)始排序
- Access教程 怎樣制作復(fù)雜報(bào)表
- Access教程 如何模糊參數(shù)進(jìn)行分頁(yè)查詢代碼
- Access教程 如何在字段定義主鍵
Access數(shù)據(jù)庫(kù)教程Rss訂閱編程教程搜索
Access數(shù)據(jù)庫(kù)教程推薦
- access數(shù)據(jù)庫(kù)連接出錯(cuò),請(qǐng)檢查Conn.asp文件中的數(shù)據(jù)庫(kù)參數(shù)
- 解析MDB與XLS文件互相轉(zhuǎn)換方法
- 在VB中動(dòng)態(tài)創(chuàng)建數(shù)據(jù)庫(kù)
- 如何用Access輕松打印帶相片的證件
- Access數(shù)據(jù)庫(kù)操作中出現(xiàn)的怪現(xiàn)象
- ACCESS中Field對(duì)象的標(biāo)題屬性
- 關(guān)于Access 2003開(kāi)發(fā)者擴(kuò)展工具集的概述
- ASP實(shí)現(xiàn)access隨機(jī)顯示不重復(fù)記錄解決方案
- Access數(shù)據(jù)庫(kù)與SQLserver2000的數(shù)據(jù)互導(dǎo)
- 如何讓access自動(dòng)編號(hào)從1開(kāi)始排序?qū)崿F(xiàn)方法
猜你也喜歡看這些
- Access 2007“設(shè)計(jì)”功能使用教程
- 轉(zhuǎn)換Access數(shù)據(jù)庫(kù)以獲得更優(yōu)性能
- 怎樣在vc、delphi中使用mysql
- ASP\ASP.NET網(wǎng)站中怎么防止Access數(shù)據(jù)庫(kù)被別人下載
- Access宏的使用條件
- Atlas 分布式版重磅來(lái)襲
- 將ACCESS轉(zhuǎn)化成SQL2000要注意的問(wèn)題
- 解決SQL Server轉(zhuǎn)ACCESS自動(dòng)編號(hào)問(wèn)題
- 詳解數(shù)據(jù)庫(kù)高可用架構(gòu)之路
- 淺談Access數(shù)據(jù)庫(kù)用另一種方式管理密碼
- 相關(guān)鏈接:
- 教程說(shuō)明:
Access數(shù)據(jù)庫(kù)教程-Atlas 分布式版重磅來(lái)襲
。