青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

C小加

厚德 博學(xué) 求真 至善 The bright moon and breeze
posts - 145, comments - 195, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

Nosql入門知識(shí)(轉(zhuǎn))

Posted on 2012-12-01 16:57 C小加 閱讀(2168) 評(píng)論(0)  編輯 收藏 引用 所屬分類: NoSQL

1. NoSQL其實(shí)是關(guān)系型數(shù)據(jù)庫相對(duì)應(yīng)的,是no relational 即非關(guān)系型數(shù)據(jù)庫;web2.0特別是一些用戶訪問量比較大的網(wǎng)站如:www.taobao.com weibo.com baidu.com 

每秒的訪問量可能是上萬次(10K);傳統(tǒng)的關(guān)系型數(shù)據(jù)庫 mysql oracle 每秒進(jìn)行10K次數(shù)據(jù)查詢還可以勉強(qiáng)應(yīng)付,但是如果是每秒10K次讀寫數(shù)據(jù)庫,因?yàn)閿?shù)據(jù)庫的數(shù)據(jù)都是卸載磁盤中,所以磁盤IO也是支撐不住每秒10K的讀寫。

在web的架構(gòu)中,數(shù)據(jù)庫是最難進(jìn)行橫向擴(kuò)展的(通過簡單的添加機(jī)器和硬件,也就是添加一些服務(wù)節(jié)點(diǎn)來提高負(fù)載均衡能力);對(duì)于7*24小時(shí)在線的網(wǎng)站來說,對(duì)關(guān)系型數(shù)據(jù)庫進(jìn)行升級(jí)和擴(kuò)展(分布式擴(kuò)展--分庫分表)是非常痛苦的事情,往往要進(jìn)行停機(jī)維護(hù);但這種對(duì)www.taobao.com 來說是非常丑陋的事情。[--可不可以添加幾臺(tái)服務(wù)器然后把復(fù)制,然后進(jìn)行負(fù)載均衡--]。

NoSQL 是采用key/value的結(jié)構(gòu)來存儲(chǔ)數(shù)據(jù),而且大多數(shù)的NoSQL采用內(nèi)存來存儲(chǔ)數(shù)據(jù),一段時(shí)間后把數(shù)據(jù)同步到磁盤中;由于使用內(nèi)存保存數(shù)據(jù)很好地解決了高并發(fā)讀寫的問題;其次NoSQL提供了根據(jù)key值進(jìn)行橫向分表(比如:用戶id,每2000w數(shù)據(jù)放到一臺(tái)數(shù)據(jù)庫服務(wù)器中的一張用戶表中);同時(shí)實(shí)現(xiàn)了主從數(shù)據(jù)庫互備,這樣可以讓數(shù)據(jù)庫的動(dòng)態(tài)遷移變得簡單,讓數(shù)據(jù)庫服務(wù)器的橫向擴(kuò)展變得容易了。


2. 分布式數(shù)據(jù)庫的CAP理論

 CAP理論是說Consistency(一致性), Availability(可用性), partition tolerance(分布)三部分系統(tǒng);而且任何系統(tǒng)只會(huì)滿足兩個(gè),不會(huì)有任何的系統(tǒng)會(huì)同時(shí)滿足這三個(gè)條件;在傳統(tǒng)的關(guān)系型數(shù)據(jù)庫中是強(qiáng)調(diào)C 一致性,但是在滿足高可用性(高并發(fā)時(shí)效率不高),高擴(kuò)展性(分布式數(shù)據(jù)庫進(jìn)行橫向擴(kuò)展)存在一定的缺陷。但是NoSQL在進(jìn)行設(shè)計(jì)的時(shí)候就是針對(duì)并發(fā)海量數(shù)據(jù)存儲(chǔ)的情況下進(jìn)行設(shè)計(jì)的,在這種高并發(fā)海量數(shù)據(jù)下數(shù)據(jù)一致性并不像銀行那樣保持?jǐn)?shù)據(jù)的強(qiáng)一致性,所以NoSQL·放棄強(qiáng)一致性的追求,從而達(dá)到更高的可用性和擴(kuò)展性,通過“鴿巢原理”達(dá)到最終的一致性。

現(xiàn)在的數(shù)據(jù)庫系統(tǒng)肯定是同一個(gè)時(shí)刻有多個(gè)進(jìn)程對(duì)數(shù)據(jù)庫進(jìn)行讀寫操作,假設(shè)現(xiàn)在有3個(gè)進(jìn)程(A、B、C)對(duì)數(shù)據(jù)庫的某表進(jìn)行操作,

  • 強(qiáng)一致性:A寫入的數(shù)據(jù)x,B、C可以讀到數(shù)據(jù)x
  • 弱一致性:A寫入的數(shù)據(jù)x,B、C一段時(shí)間內(nèi)讀不到,最后會(huì)讀到
  • 最終一致性:是一種特殊的一致性,保證在一段時(shí)間內(nèi)沒有數(shù)據(jù)的更新,但所有的返回都是把最新的數(shù)據(jù)返回;---緩存的概念,一段時(shí)間后把數(shù)據(jù)更新到數(shù)據(jù)庫,達(dá)到最終一致性。
3. 哈希算法
(1). 哈希算法的基本原理:
     哈希算法的提出和應(yīng)用背景,對(duì)于一個(gè)龐大的字符串?dāng)?shù)組array,給你一個(gè)字符串讓你判斷它是否在這個(gè)字符串?dāng)?shù)組中并找到它,最好的辦法就是把這個(gè)龐大的字符串?dāng)?shù)組構(gòu)建成一個(gè)哈希表,然后在進(jìn)行查詢是否有這個(gè)字符串。
 (2).構(gòu)建hash table的過程:一般是采用一個(gè)32的整數(shù)來代表一個(gè)字符串,首先這個(gè)array的字符串已經(jīng)存在內(nèi)存或者磁盤中,我們要做的只是按照一定的算法把每個(gè)字符串映射到一個(gè)32位的整數(shù),每個(gè)int占4個(gè)字節(jié),在字符串中每個(gè)字符都占一個(gè)字節(jié);這樣就建立了字符串與32位整數(shù)的映射,然后根據(jù)程序大小設(shè)定一個(gè)hash table的Size(這個(gè)Size確保所有的int % Size的值是唯一的--取最大值即可),這個(gè)把剛才得到的所有字符串對(duì)應(yīng)的32位整數(shù)對(duì)這個(gè)Size進(jìn)行取模,這個(gè)模值就是此整數(shù)在hash table的位置;這個(gè)位置與每一個(gè)字符串又建立了一個(gè)映射關(guān)系;這樣讓你查詢這個(gè)str是否在array中?
  • 首先,是把這個(gè)str,用相同的哈希算法進(jìn)行編碼---->映射到一個(gè)32位的int型數(shù)據(jù) num
  • 然后,把這個(gè)num % Size 獲取此字符串在hash table里面的位置;
  • 然后,判斷hash table 此位置是否已經(jīng)有數(shù)據(jù)占用,如果已經(jīng)占用說明在array里面有一個(gè)字符串對(duì)應(yīng)的32位整數(shù)與str的32位整數(shù)相同,在一個(gè)字符串對(duì)應(yīng)唯一一個(gè)32位整數(shù)的前提條件下,就說明array里面存在字符串str。
  1. int GetHashTablePos(char *lpszString, SOMESTRUCTURE *lpTable, int nTableSize)  
  2. { //lpszSring--要查詢的字符串;lpTable 哈希表;nTableSize是哈希表的Size  
  3. int nHash = HashString(lpszString), nHashPos = nHash % nTableSize;  
  4.   
  5. if (lpTable[nHashPos].bExists && !strcmp(lpTable[nHashPos].pString, lpszString))  //時(shí)間復(fù)雜度是O(1)  
  6.   return nHashPos;  
  7. else  
  8.   return -1; //Error value  
  9. }  
(3).  上面的處理方法是假設(shè)一個(gè)字符串通過一個(gè)哈希算法只得到唯一一個(gè)hashcode(32為int整數(shù));但是如果存在兩個(gè)整數(shù)在同一個(gè)哈希算法得到同一個(gè)hashcode,那這個(gè)查詢就不正確的,雖然這個(gè)可能性比較小,但確實(shí)存在這個(gè)風(fēng)險(xiǎn)。
采用的解決辦法是用多個(gè)不同的哈希算法來校驗(yàn),兩個(gè)str 在三個(gè)不同的哈希算法得到的hashcode都相同的概率是:1/18889465931478580854784;可以認(rèn)為是OK的。
  1. int GetHashTablePos(char *lpszString, MPQHASHTABLE *lpTable, int nTableSize)  
  2. {  
  3. const int HASH_OFFSET = 0HASH_A = 1HASH_B = 2;  
  4. int nHash = HashString(lpszString, HASH_OFFSET);  
  5. int nHashA = HashString(lpszString, HASH_A);  
  6. int nHashB = HashString(lpszString, HASH_B);  
  7. int nHashStart = nHash % nTableSize, nHashPos = nHashStart;  
  8. while (lpTable[nHashPos].bExists)  
  9. {  
  10.   if (lpTable[nHashPos].nHashA == nHashA && lpTable[nHashPos].nHashB == nHashB)  
  11.    return nHashPos;  
  12.   else  
  13.    nHashPos = (nHashPos + 1) % nTableSize;  
  14.   if (nHashPos == nHashStart)  
  15.    break;  
  16. }  
  17. return -1; //Error value  
  18. }  

這樣就可以保證萬無一失了!
(4). 常見的哈希算法:MD5 SHA  SHA-1等都是常用的哈希算法,而且他們都屬于混合哈希算法,除了混合哈希算法還有加法、乘法、除法的哈希算法;
所以,在比較一個(gè)文件是否發(fā)生變化的方法出了可以用最后修改時(shí)間來判斷,也可以用其哈希code來比較,比如用MD5來比較,如果其MD5都變化了則文件一定被修改了。

4. Tair 緩存也是一種 基于key/value的NoSQL結(jié)構(gòu)開發(fā)的一種緩存機(jī)制,其實(shí)質(zhì)也是NoSQL數(shù)據(jù)庫,不過是key/value結(jié)構(gòu)而且是用內(nèi)存來存儲(chǔ)數(shù)據(jù),所以用把Tair叫做緩存。

5. 關(guān)系型數(shù)據(jù)庫的事務(wù)(ACID)
(1). 事務(wù)(Transaction):Transaction是訪問并可能更新數(shù)據(jù)庫中各種數(shù)據(jù)項(xiàng)的一個(gè)程序執(zhí)行單元(unit),事務(wù)一般由高級(jí)數(shù)據(jù)語言(C++ Java SQL)等寫的用戶程序引起的,并用begin transaction----end transaction 來界定一個(gè)完整的事務(wù)
  1. <begin transaction>  
  2. ****  
  3. ****  
  4. ****  
  5. </end transaction>  
一個(gè)完整的事務(wù)由begin transaction----end transaction  里面的所有操作組成;在關(guān)系型數(shù)據(jù)庫中一個(gè)事務(wù)可以是一條SQL語句或一組SQL語句或者是一個(gè)程序;事務(wù)是并發(fā)和回滾的基本單位。
(2). 事務(wù)的ACID屬性:
  • Atomicity(原子性):一個(gè)事務(wù)是一個(gè)不可分割的完整單元,一個(gè)transaction里面的所有操作要么都做完,要么都不做;當(dāng)中間一個(gè)操作失敗把所有已經(jīng)做的操作都回滾!
  • Consistency(一致性):數(shù)據(jù)庫在一個(gè)事務(wù)開始前是一致性的,在這個(gè)事務(wù)執(zhí)行完畢后仍然是一致性的;只是從一個(gè)一致性狀態(tài)到另一個(gè)一致性狀態(tài);但都是一致性的
  • Isolation(隔離性):一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)所打擾,即一個(gè)事務(wù)內(nèi)部操作及使用的數(shù)據(jù)對(duì)并發(fā)的事務(wù)是隔離的,并發(fā)執(zhí)行的事務(wù)之間互相不干擾(不理解)!!
  • Durablity(持久性):也就永久性(Permanence),即一個(gè)事務(wù)一旦執(zhí)行完畢,則它對(duì)數(shù)據(jù)庫的更新是持久性的,即不受其他操作的影響;也就是事務(wù)修改了數(shù)據(jù)庫了
這個(gè)ACID的屬性是關(guān)系型數(shù)據(jù)庫(DBMS)非常重要的屬性,在執(zhí)行數(shù)據(jù)庫操作時(shí)必須滿足ACID屬性,其中AI是我們編程中要注意的地方。
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            在线观看亚洲一区| 国产一区二区成人| 国产精品啊v在线| 亚洲第一区在线| 久久av一区二区三区漫画| 亚洲毛片视频| 欧美理论大片| 99亚洲精品| 亚洲第一精品福利| 玖玖玖国产精品| 一区二区三区在线免费播放| 久久精品欧美日韩精品| 亚洲制服欧美中文字幕中文字幕| 国产精品xvideos88| 亚洲专区欧美专区| 亚洲视频在线观看网站| 国产精品视频免费在线观看| 亚洲欧美日韩国产综合精品二区| 亚洲色无码播放| 国产精品一级二级三级| 久久精品亚洲一区二区| 久久综合激情| 一区二区三区高清视频在线观看| 亚洲片在线资源| 国产精品国产三级国产普通话99| 校园激情久久| 久久国产一区二区| 91久久午夜| 日韩一区二区精品| 国产精品日韩二区| 久久亚洲春色中文字幕| 另类天堂视频在线观看| 欧美成ee人免费视频| 蜜桃久久av一区| 一区二区冒白浆视频| 亚洲尤物在线| 影音先锋日韩精品| 亚洲人成亚洲人成在线观看图片 | 日韩午夜高潮| 国产精品午夜av在线| 久久亚洲精品视频| 欧美日韩1区2区3区| 欧美一区二区播放| 蜜桃久久精品乱码一区二区| 亚洲午夜视频在线| 久久久久久香蕉网| 亚洲一区精品视频| 久久久久久久综合| 亚洲欧美日本国产专区一区| 久久综合久久综合九色| 亚洲永久视频| 欧美mv日韩mv亚洲| 久久精品亚洲一区二区| 欧美搞黄网站| 久久综合九九| 国产精品久久国产愉拍| 欧美1区2区视频| 国产免费成人av| 亚洲美女啪啪| 亚洲激情成人网| 欧美在线观看视频一区二区三区| 一区二区日韩欧美| 欧美不卡视频一区| 久久亚洲综合| 国产私拍一区| 亚洲欧美成人一区二区在线电影| 日韩系列欧美系列| 老司机精品视频网站| 久久国内精品视频| 国产精品每日更新在线播放网址| 亚洲黄色免费| 亚洲高清在线精品| 久久久亚洲高清| 久久久久久网址| 国产女主播一区| 亚洲性线免费观看视频成熟| 99精品视频一区| 免费成人av在线| 欧美成人乱码一区二区三区| 国产亚洲一区在线| 先锋影音久久| 久久gogo国模裸体人体| 国产精品亚洲综合一区在线观看| 日韩亚洲一区在线播放| 99精品视频免费观看| 欧美国产日韩亚洲一区| 欧美黄色aa电影| 亚洲精品国产精品乱码不99按摩| 浪潮色综合久久天堂| 鲁大师影院一区二区三区| 加勒比av一区二区| 久久乐国产精品| 欧美国产精品| 亚洲毛片一区二区| 欧美日韩国产一区| 久久综合久色欧美综合狠狠 | 小黄鸭精品密入口导航| 一本色道久久综合狠狠躁篇的优点| 久热精品在线| 欧美黄色小视频| 亚洲欧洲日本mm| 美女主播一区| 亚洲精品一二三区| 亚洲一区久久久| 国产农村妇女毛片精品久久麻豆| 午夜精品一区二区三区四区| 久久精品视频99| 亚洲高清在线观看一区| 欧美人与禽猛交乱配视频| 99天天综合性| 欧美在线二区| 亚洲激情av| 国产精品99免费看| 欧美在线一区二区| 美日韩精品视频免费看| 夜久久久久久| 国内一区二区在线视频观看| 在线一区视频| 欧美在线视频在线播放完整版免费观看 | 欧美a级一区二区| 亚洲精品极品| 亚洲综合色婷婷| 在线观看精品一区| 欧美精品久久一区二区| 亚洲一区二区三区色| 久久一区精品| 日韩一级在线观看| 国产欧美日韩另类视频免费观看| 久久天堂国产精品| 亚洲精品女av网站| 午夜精品福利一区二区三区av| 国产专区欧美专区| 久久精品国产69国产精品亚洲| 欧美成人午夜视频| 欧美成人一区二区三区片免费| 亚洲黄色性网站| 欧美亚洲成人网| 久久精品99国产精品| 日韩一区二区久久| 久久一二三区| 亚洲一级片在线观看| 国产又爽又黄的激情精品视频| 欧美成人在线免费观看| 亚洲欧美日韩天堂| 91久久亚洲| 久久蜜桃精品| 一区二区三区视频免费在线观看 | 99精品欧美一区二区三区综合在线| 国产精品毛片| 欧美不卡一区| 亚洲免费高清视频| 欧美激情亚洲国产| 久久精品免费| 亚洲伦理一区| 亚洲激情偷拍| 亚洲精品一区二区在线观看| 亚洲一区二区欧美日韩| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲视频高清| 亚洲精品欧美激情| 在线看一区二区| 国产午夜一区二区三区| 欧美日韩视频在线第一区| 美女亚洲精品| 老鸭窝亚洲一区二区三区| 欧美伊人久久久久久久久影院| 日韩午夜在线| 亚洲高清免费在线| 久久尤物电影视频在线观看| 欧美一级大片在线免费观看| 亚洲欧美精品在线| 亚洲视频久久| 亚洲午夜成aⅴ人片| 新狼窝色av性久久久久久| 亚洲人成网站在线播| 中文一区二区在线观看| 亚洲日本欧美| 亚洲精品国产精品国自产在线| 一区二区三区在线视频播放| 国产一区二区成人| 国产日韩欧美一二三区| 国产亚洲欧美日韩在线一区 | 国产免费成人在线视频| 国产精品乱码一区二三区小蝌蚪| 欧美亚日韩国产aⅴ精品中极品| 欧美日韩国内| 欧美色图一区二区三区| 国产精品福利影院| 国产精品久久久久久久久久久久久| 亚洲精品乱码久久久久久蜜桃麻豆 | 性亚洲最疯狂xxxx高清| 亚洲综合视频网| 欧美在线一二三区| 久久久久9999亚洲精品| 美腿丝袜亚洲色图| 欧美成人综合| 国产精品国产三级国产aⅴ入口| 国产精品日韩欧美一区| 国产在线麻豆精品观看| 最新中文字幕亚洲|