日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

Atlas 分布式版重磅來(lái)襲_Access數(shù)據(jù)庫(kù)教程

編輯Tag賺U幣
教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!

推薦:詳解數(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 分布式版重磅來(lái)襲

 

  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 方式

Atlas 分布式版重磅來(lái)襲

 

  如上圖中, 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 分布式版重磅來(lái)襲

 

  目前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

共2頁(yè)上一頁(yè)12下一頁(yè)
來(lái)源:模板無(wú)憂//所屬分類:Access數(shù)據(jù)庫(kù)教程/更新時(shí)間:2015-05-18
相關(guān)Access數(shù)據(jù)庫(kù)教程