日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

NoSQL架构实践(一)——以NoSQL为辅

發(fā)布時(shí)間:2025/3/16 数据库 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NoSQL架构实践(一)——以NoSQL为辅 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

怎么樣把NoSQL引入到我們的系統(tǒng)架構(gòu)設(shè)計(jì)中,需要根據(jù)我們系統(tǒng)的業(yè)務(wù)場(chǎng)景來(lái)分析,什么樣類型的數(shù)據(jù)適合存儲(chǔ)在NoSQL數(shù)據(jù)庫(kù)中,什么樣類型的數(shù)據(jù)必須使用關(guān)系數(shù)據(jù)庫(kù)存儲(chǔ)。明確引入的NoSQL數(shù)據(jù)庫(kù)帶給系統(tǒng)的作用,它能解決什么問(wèn)題,以及可能帶來(lái)的新的問(wèn)題。下面我們分析幾種常見(jiàn)的NoSQL架構(gòu)。

(一)NoSQL作為鏡像

不改變?cè)械囊訫ySQL作為存儲(chǔ)的架構(gòu),使用NoSQL作為輔助鏡像存儲(chǔ),用NoSQL的優(yōu)勢(shì)輔助提升性能。

圖 1 -NoSQL為鏡像(代碼完成模式 )

//寫入數(shù)據(jù)的示例偽代碼 //data為我們要存儲(chǔ)的數(shù)據(jù)對(duì)象 data.title=”title”; data.name=”name”; data.time=”2009-12-01 10:10:01”; data.from=”1”; id=DB.Insert(data);//寫入MySQL數(shù)據(jù)庫(kù) NoSQL.Add(id,data);//以寫入MySQL產(chǎn)生的自增id為主鍵寫入NoSQL數(shù)據(jù)庫(kù)

如果有數(shù)據(jù)一致性要求,可以像如下的方式使用

//寫入數(shù)據(jù)的示例偽代碼 //data為我們要存儲(chǔ)的數(shù)據(jù)對(duì)象 bool status=false; DB.startTransaction();//開(kāi)始事務(wù) id=DB.Insert(data);//寫入MySQL數(shù)據(jù)庫(kù) if(id>0){ status=NoSQL.Add(id,data);//以寫入MySQL產(chǎn)生的自增id為主鍵寫入NoSQL數(shù)據(jù)庫(kù) } if(id>0 && status==true){ DB.commit();//提交事務(wù) }else{ DB.rollback();//不成功,進(jìn)行回滾 }

上面的代碼看起來(lái)可能覺(jué)得有點(diǎn)麻煩,但是只需要在DB類或者ORM層做一個(gè)統(tǒng)一的封裝,就能實(shí)現(xiàn)重用了,其他代碼都不用做任何的修改。

這種架構(gòu)在原有基于MySQL數(shù)據(jù)庫(kù)的架構(gòu)上增加了一層輔助的NoSQL存儲(chǔ),代碼量不大,技術(shù)難度小,卻在可擴(kuò)展性和性能上起到了非常大的作用。只需要程序在寫入MySQL數(shù)據(jù)庫(kù)后,同時(shí)寫入到NoSQL數(shù)據(jù)庫(kù),讓MySQL和NoSQL擁有相同的鏡像數(shù)據(jù),在某些可以根據(jù)主鍵查詢的地方,使用高效的NoSQL數(shù)據(jù)庫(kù)查詢,這樣就節(jié)省了MySQL的查詢,用NoSQL的高性能來(lái)抵擋這些查詢。

圖 2 -NoSQL為鏡像(同步模式)

這種不通過(guò)程序代碼,而是通過(guò)MySQL把數(shù)據(jù)同步到NoSQL中,這種模式是上面一種的變體,是一種對(duì)寫入透明但是具有更高技術(shù)難度一種模式。這種模式適用于現(xiàn)有的比較復(fù)雜的老系統(tǒng),通過(guò)修改代碼不易實(shí)現(xiàn),可能引起新的問(wèn)題。同時(shí)也適用于需要把數(shù)據(jù)同步到多種類型的存儲(chǔ)中。

MySQL到NoSQL同步的實(shí)現(xiàn)可以使用MySQL UDF函數(shù),MySQL binlog的解析來(lái)實(shí)現(xiàn)。可以利用現(xiàn)有的開(kāi)源項(xiàng)目來(lái)實(shí)現(xiàn),比如:

  • MySQL memcached UDFs:從通過(guò)UDF操作Memcached協(xié)議。
  • 國(guó)內(nèi)張宴開(kāi)源的mysql-udf-http:通過(guò)UDF操作http協(xié)議。

有了這兩個(gè)MySQL UDF函數(shù)庫(kù),我們就能通過(guò)MySQL透明的處理Memcached或者Http協(xié)議,這樣只要有兼容Memcached或者Http協(xié)議的NoSQL數(shù)據(jù)庫(kù),那么我們就能通過(guò)MySQL去操作以進(jìn)行同步數(shù)據(jù)。再結(jié)合lib_mysqludf_json,通過(guò)UDF和MySQL觸發(fā)器功能的結(jié)合,就可以實(shí)現(xiàn)數(shù)據(jù)的自動(dòng)同步。

(二)MySQL和NoSQL組合

MySQL中只存儲(chǔ)需要查詢的小字段,NoSQL存儲(chǔ)所有數(shù)據(jù)。

圖 3 -MySQL和NoSQL組合

//寫入數(shù)據(jù)的示例偽代碼 //data為我們要存儲(chǔ)的數(shù)據(jù)對(duì)象 data.title=”title”; data.name=”name”; data.time=”2009-12-01 10:10:01”; data.from=”1”; bool status=false; DB.startTransaction();//開(kāi)始事務(wù) id=DB.Insert(“INSERT INTO table (from) VALUES(data.from)”);//寫入MySQL數(shù)據(jù)庫(kù),只寫from需要where查詢的字段 if(id>0){ status=NoSQL.Add(id,data);//以寫入MySQL產(chǎn)生的自增id為主鍵寫入NoSQL數(shù)據(jù)庫(kù) } if(id>0 && status==true){ DB.commit();//提交事務(wù) }else{ DB.rollback();//不成功,進(jìn)行回滾 }

把需要查詢的字段,一般都是數(shù)字,時(shí)間等類型的小字段存儲(chǔ)于MySQL中,根據(jù)查詢建立相應(yīng)的索引,其他不需要的字段,包括大文本字段都存儲(chǔ)在NoSQL中。在查詢的時(shí)候,我們先從MySQL中查詢出數(shù)據(jù)的主鍵,然后從NoSQL中直接取出對(duì)應(yīng)的數(shù)據(jù)即可。

這種架構(gòu)模式把MySQL和NoSQL的作用進(jìn)行了融合,各司其職,讓MySQL專門負(fù)責(zé)處理擅長(zhǎng)的關(guān)系存儲(chǔ),NoSQL作為數(shù)據(jù)的存儲(chǔ)。它有以下優(yōu)點(diǎn):

  • 節(jié)省MySQL的IO開(kāi)銷。由于MySQL只存儲(chǔ)需要查詢的小字段,不再負(fù)責(zé)存儲(chǔ)大文本字段,這樣就可以節(jié)省MySQL存儲(chǔ)的空間開(kāi)銷,從而節(jié)省MySQL的磁盤IO。我們?cè)?jīng)通過(guò)這種優(yōu)化,把MySQL一個(gè)40G的表縮減到幾百M(fèi)。
  • 提高M(jìn)ySQl Query Cache緩存命中率。我們知道query cache緩存失效是表級(jí)的,在MySQL表一旦被更新就會(huì)失效,經(jīng)過(guò)這種字段的分離,更新的字段如果不是存儲(chǔ)在MySQL中,那么對(duì)query cache就沒(méi)有任何影響。而NoSQL的Cache往往都是行級(jí)別的,只對(duì)更新的記錄的緩存失效。
  • 提升MySQL主從同步效率。由于MySQL存儲(chǔ)空間的減小,同步的數(shù)據(jù)記錄也減小了,而部分?jǐn)?shù)據(jù)的更新落在NoSQL而不是MySQL,這樣也減少了MySQL數(shù)據(jù)需要同步的次數(shù)。
  • 提高M(jìn)ySQL數(shù)據(jù)備份和恢復(fù)的速度。由于MySQL數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)的減小,很容易看到數(shù)據(jù)備份和恢復(fù)的速度也將極大的提高。
  • 比以前更容易擴(kuò)展。NoSQL天生就容易擴(kuò)展。經(jīng)過(guò)這種優(yōu)化,MySQL性能也得到提高。

比如手機(jī)鳳凰網(wǎng)就是這種架構(gòu) http://www.cnblogs.com/sunli/archive/2010/12/20/imcp.html

總結(jié)

以NoSQL為輔的架構(gòu)還是以MySQL架構(gòu)的思想為中心,只是在以前的架構(gòu)上輔助增加了NoSQL來(lái)提高其性能和可擴(kuò)展性。這種架構(gòu)實(shí)現(xiàn)起來(lái)比較容易,卻能取得不錯(cuò)的效果。如果正想在項(xiàng)目中引入NoSQL,或者你的以MySQL架構(gòu)的系統(tǒng)目前正出現(xiàn)相關(guān)的瓶頸,希望本文可以為你帶來(lái)幫助。

總結(jié)

以上是生活随笔為你收集整理的NoSQL架构实践(一)——以NoSQL为辅的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 完全免费av | 婷婷综合网站 | 1级av| 日本成人在线视频网站 | 伊人春色影院 | 国产日本在线 | 成人久久18免费网站图片 | 麻豆网站在线免费观看 | 天码人妻一区二区三区在线看 | 日本成人一区二区三区 | 日韩午夜在线播放 | 欧美黑人粗大 | 不卡的在线视频 | 亚洲福利社区 | 色欧美视频 | 精品爆乳一区二区三区 | 日韩精品短片 | 亚洲在线激情 | 丰满熟妇肥白一区二区在线 | 国产午夜免费 | 在线观看精品 | 亚洲精品在线视频 | 粉嫩久久99精品久久久久久夜 | 亚洲性网站 | 在线中文字幕第一页 | 中日黄色片 | 国产精品无码一区 | 欧美日韩亚洲国产综合 | 亚洲av片不卡无码久久 | 久久久噜噜噜久久中文字幕色伊伊 | 日韩av看片 | 9l视频自拍蝌蚪9l视频成人 | 久久久久人妻一区精品 | 亚洲av综合av一区二区三区 | 二区影院| 一级 黄 色 片69 | 日韩久久影院 | 欧美成人精品一区二区三区在线观看 | 久久成人国产精品入口 | 成人a视频在线观看 | 福利视频不卡 | 中文字幕在线免费看线人 | aa视频免费观看 | 海角社区id:1220.7126,10. | 日韩人妻精品无码一区二区三区 | 欧美综合精品 | 给我看高清的视频在线观看 | 欧洲精品久久久 | 人与拘一级a毛片 | 一区二区高清在线 | 蜜桃视频污在线观看 | 日本免费不卡一区二区 | 久久影视av | 99免费在线| 亚洲理论视频 | 日韩有码中文字幕在线 | 久久激情小说 | 97性视频 | 免费无码不卡视频在线观看 | 亚洲影视一区 | 成年人午夜视频 | 四虎在线免费播放 | 亚洲黄色免费 | 欧美日韩观看 | 免费三片60分钟 | 国产精品久久久爽爽爽麻豆色哟哟 | 日本少妇网站 | 一级特黄高清 | 无码人妻丰满熟妇区96 | 免费一级全黄少妇性色生活片 | 中文在线字幕 | 91免费看片 | 色01看片网| av中文在线播放 | 手机在线免费看av | 欧美韩一区二区 | 亚洲精品国产一区二 | 欧美成人午夜剧场 | 亚洲国产精品天堂 | 成人影视免费观看 | 尤物精品 | 波多野结衣中文字幕一区二区 | 18岁毛片| 久久久久久成人精品 | 波多野结衣乳巨码无在线 | 在线观看黄色片 | 涩涩视频在线 | 告诉我真相俄剧在线观看 | 午夜影院操 | 天天摸日日摸 | 欧美成人久久久免费播放 | 国产精品免费一区二区三区都可以 | 亚洲九九| 国产特级毛片aaaaaa | 成人免费视频一区二区 | 亚洲资源av | 激情网站在线观看 | www欧美| www毛片com |