最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

NoSQL開篇之為什么要使用NoSQL

 更新時間:2016年02月05日 23:27:51   投稿:mdxy-dxy  
NoSQL在2010年風生水起,大大小小的Web站點在追求高性能高可靠性方面,不由自主都選擇了NoSQL技術作為優(yōu)先考慮的方面

NoSQL在2010年風生水起,大大小小的Web站點在追求高性能高可靠性方面,不由自主都選擇了NoSQL技術作為優(yōu)先考慮的方面。今年伊始,InfoQ中文站有幸邀請到鳳凰網(wǎng)的孫立先生,為大家分享他之于NoSQL方面的經(jīng)驗和體會。

非常榮幸能受邀在InfoQ開辟這樣一個關于NoSQL的專欄,InfoQ是我非常尊重的一家技術媒體,同時我也希望借助InfoQ,在國內(nèi)推動NoSQL的發(fā)展,希望跟我一樣有興趣的朋友加入進來。這次的NoSQL專欄系列將先整體介紹NoSQL,然后介紹如何把NoSQL運用到自己的項目中合適的場景中,還會適當?shù)胤治鲆恍┏晒Π咐?,希望有成功使用NoSQL經(jīng)驗的朋友給我提供一些線索和信息。

NoSQL概念

隨著web2.0的快速發(fā)展,非關系型、分布式數(shù)據(jù)存儲得到了快速的發(fā)展,它們不保證關系數(shù)據(jù)的ACID特性。NoSQL概念在2009年被提了出來。NoSQL最常見的解釋是“non-relational”,“Not Only SQL”也被很多人接受。(“NoSQL”一詞最早于1998年被用于一個輕量級的關系數(shù)據(jù)庫的名字。)
NoSQL被我們用得最多的當數(shù)key-value存儲,當然還有其他的文檔型的、列存儲、圖型數(shù)據(jù)庫、xml數(shù)據(jù)庫等。在NoSQL概念提出之前,這些數(shù)據(jù)庫就被用于各種系統(tǒng)當中,但是卻很少用于web互聯(lián)網(wǎng)應用。比如cdb、qdbm、bdb數(shù)據(jù)庫。

傳統(tǒng)關系數(shù)據(jù)庫的瓶頸

傳統(tǒng)的關系數(shù)據(jù)庫具有不錯的性能,高穩(wěn)定型,久經(jīng)歷史考驗,而且使用簡單,功能強大,同時也積累了大量的成功案例。在互聯(lián)網(wǎng)領域,MySQL成為了絕對靠前的王者,毫不夸張的說,MySQL為互聯(lián)網(wǎng)的發(fā)展做出了卓越的貢獻。
在90年代,一個網(wǎng)站的訪問量一般都不大,用單個數(shù)據(jù)庫完全可以輕松應付。在那個時候,更多的都是靜態(tài)網(wǎng)頁,動態(tài)交互類型的網(wǎng)站不多。
到了最近10年,網(wǎng)站開始快速發(fā)展?;鸨恼搲?、博客、sns、微博逐漸引領web領域的潮流。在初期,論壇的流量其實也不大,如果你接觸網(wǎng)絡比較早,你可能還記得那個時候還有文本型存儲的論壇程序,可以想象一般的論壇的流量有多大。

Memcached+MySQL

后來,隨著訪問量的上升,幾乎大部分使用MySQL架構(gòu)的網(wǎng)站在數(shù)據(jù)庫上都開始出現(xiàn)了性能問題,web程序不再僅僅專注在功能上,同時也在追求性能。程序員們開始大量的使用緩存技術來緩解數(shù)據(jù)庫的壓力,優(yōu)化數(shù)據(jù)庫的結(jié)構(gòu)和索引。開始比較流行的是通過文件緩存來緩解數(shù)據(jù)庫壓力,但是當訪問量繼續(xù)增大的時候,多臺web機器通過文件緩存不能共享,大量的小文件緩存也帶了了比較高的IO壓力。在這個時候,Memcached就自然的成為一個非常時尚的技術產(chǎn)品。
Memcached作為一個獨立的分布式的緩存服務器,為多個web服務器提供了一個共享的高性能緩存服務,在Memcached服務器上,又發(fā)展了根據(jù)hash算法來進行多臺Memcached緩存服務的擴展,然后又出現(xiàn)了一致性hash來解決增加或減少緩存服務器導致重新hash帶來的大量緩存失效的弊端。當時,如果你去面試,你說你有Memcached經(jīng)驗,肯定會加分的。

Mysql主從讀寫分離

由于數(shù)據(jù)庫的寫入壓力增加,Memcached只能緩解數(shù)據(jù)庫的讀取壓力。讀寫集中在一個數(shù)據(jù)庫上讓數(shù)據(jù)庫不堪重負,大部分網(wǎng)站開始使用主從復制技術來達到讀寫分離,以提高讀寫性能和讀庫的可擴展性。Mysql的master-slave模式成為這個時候的網(wǎng)站標配了。

分表分庫

隨著web2.0的繼續(xù)高速發(fā)展,在Memcached的高速緩存,MySQL的主從復制,讀寫分離的基礎之上,這時MySQL主庫的寫壓力開始出現(xiàn)瓶頸,而數(shù)據(jù)量的持續(xù)猛增,由于MyISAM使用表鎖,在高并發(fā)下會出現(xiàn)嚴重的鎖問題,大量的高并發(fā)MySQL應用開始使用InnoDB引擎代替MyISAM。同時,開始流行使用分表分庫來緩解寫壓力和數(shù)據(jù)增長的擴展問題。這個時候,分表分庫成了一個熱門技術,是面試的熱門問題也是業(yè)界討論的熱門技術問題。也就在這個時候,MySQL推出了還不太穩(wěn)定的表分區(qū),這也給技術實力一般的公司帶來了希望。雖然MySQL推出了MySQL Cluster集群,但是由于在互聯(lián)網(wǎng)幾乎沒有成功案例,性能也不能滿足互聯(lián)網(wǎng)的要求,只是在高可靠性上提供了非常大的保證。

MySQL的擴展性瓶頸

在互聯(lián)網(wǎng),大部分的MySQL都應該是IO密集型的,事實上,如果你的MySQL是個CPU密集型的話,那么很可能你的MySQL設計得有性能問題,需要優(yōu)化了。大數(shù)據(jù)量高并發(fā)環(huán)境下的MySQL應用開發(fā)越來越復雜,也越來越具有技術挑戰(zhàn)性。分表分庫的規(guī)則把握都是需要經(jīng)驗的。雖然有像淘寶這樣技術實力強大的公司開發(fā)了透明的中間件層來屏蔽開發(fā)者的復雜性,但是避免不了整個架構(gòu)的復雜性。分庫分表的子庫到一定階段又面臨擴展問題。還有就是需求的變更,可能又需要一種新的分庫方式。
MySQL數(shù)據(jù)庫也經(jīng)常存儲一些大文本字段,導致數(shù)據(jù)庫表非常的大,在做數(shù)據(jù)庫恢復的時候就導致非常的慢,不容易快速恢復數(shù)據(jù)庫。比如1000萬4KB大小的文本就接近40GB的大小,如果能把這些數(shù)據(jù)從MySQL省去,MySQL將變得非常的小。
關系數(shù)據(jù)庫很強大,但是它并不能很好的應付所有的應用場景。MySQL的擴展性差(需要復雜的技術來實現(xiàn)),大數(shù)據(jù)下IO壓力大,表結(jié)構(gòu)更改困難,正是當前使用MySQL的開發(fā)人員面臨的問題。

NOSQL的優(yōu)勢

易擴展

NoSQL數(shù)據(jù)庫種類繁多,但是一個共同的特點都是去掉關系數(shù)據(jù)庫的關系型特性。數(shù)據(jù)之間無關系,這樣就非常容易擴展。也無形之間,在架構(gòu)的層面上帶來了可擴展的能力。

大數(shù)據(jù)量,高性能

NoSQL數(shù)據(jù)庫都具有非常高的讀寫性能,尤其在大數(shù)據(jù)量下,同樣表現(xiàn)優(yōu)秀。這得益于它的無關系性,數(shù)據(jù)庫的結(jié)構(gòu)簡單。一般MySQL使用Query Cache,每次表的更新Cache就失效,是一種大粒度的Cache,在針對web2.0的交互頻繁的應用,Cache性能不高。而NoSQL的Cache是記錄級的,是一種細粒度的Cache,所以NoSQL在這個層面上來說就要性能高很多了。

靈活的數(shù)據(jù)模型

NoSQL無需事先為要存儲的數(shù)據(jù)建立字段,隨時可以存儲自定義的數(shù)據(jù)格式。而在關系數(shù)據(jù)庫里,增刪字段是一件非常麻煩的事情。如果是非常大數(shù)據(jù)量的表,增加字段簡直就是一個噩夢。這點在大數(shù)據(jù)量的web2.0時代尤其明顯。

高可用

NoSQL在不太影響性能的情況,就可以方便的實現(xiàn)高可用的架構(gòu)。比如Cassandra,HBase模型,通過復制模型也能實現(xiàn)高可用。

總結(jié)

NoSQL數(shù)據(jù)庫的出現(xiàn),彌補了關系數(shù)據(jù)(比如MySQL)在某些方面的不足,在某些方面能極大的節(jié)省開發(fā)成本和維護成本。
MySQL和NoSQL都有各自的特點和使用的應用場景,兩者的緊密結(jié)合將會給web2.0的數(shù)據(jù)庫發(fā)展帶來新的思路。讓關系數(shù)據(jù)庫關注在關系上,NoSQL關注在存儲上。

參考閱讀

NoSQL:http://nosql-database.org/
NoSQL在wiki上的介紹:http://en.wikipedia.org/wiki/NoSQL
NoSQL相關博客:http://nosql.mypopescu.com/
NoSQL相關博客:http://blog.nosqlfan.com/
新浪微博NoSQL微群:http://q.t.sina.com.cn/127870

關于作者

孫立,目前在鳳凰網(wǎng)負責底層組的研發(fā)工作。曾就職于搜狐和ku6。多年互聯(lián)網(wǎng)從業(yè)經(jīng)驗和程序開發(fā),對分布式搜索引擎的開發(fā),高并發(fā),大數(shù)據(jù)量網(wǎng)站系統(tǒng)架構(gòu)優(yōu)化,高可用性,可伸縮性,分布式系統(tǒng)緩存,數(shù)據(jù)庫分表分庫(sharding)等有豐富的經(jīng)驗,并且對運維監(jiān)控和自動化運維控制有經(jīng)驗。開源項目phplock,phpbuffer的作者。近期開發(fā)了一個NOSQL數(shù)據(jù)庫存儲INetDB,是NoSQL數(shù)據(jù)庫愛好者。他的新浪微博是:http://t.sina.com.cn/sunli1223
感謝張凱峰對本文的策劃及審校。

相關文章

  • 數(shù)據(jù)庫服務器構(gòu)建和部署檢查列表詳解

    數(shù)據(jù)庫服務器構(gòu)建和部署檢查列表詳解

    這篇文章主要介紹了數(shù)據(jù)庫服務器構(gòu)建和部署檢查列表的相關內(nèi)容,小編覺得挺不錯的,這里分享給大家,供各位參考。
    2017-10-10
  • 詳解Navicat Premium基本使用

    詳解Navicat Premium基本使用

    Navicat是一套數(shù)據(jù)庫管理工具,專為簡化數(shù)據(jù)庫的管理及降低系統(tǒng)管理成本而設。這篇文章主要介紹了詳解Navicat Premium基本使用,需要的朋友可以參考下
    2020-11-11
  • StarRocks索引詳解(最新整理)

    StarRocks索引詳解(最新整理)

    StarRocks支持多種索引類型,包括主鍵索引、前綴索引、Bitmap索引和Bloomfilter索引,這些索引類型適用于不同場景,如唯一性約束、減少索引空間、高效集合運算和快速排除不存在的數(shù)據(jù)塊,本文介紹StarRocks索引的相關知識,感興趣的朋友一起看看吧
    2025-03-03
  • DataGrip2022導入和導出sql文件圖文教程

    DataGrip2022導入和導出sql文件圖文教程

    這篇文章主要給大家介紹了關于DataGrip2022導入和導出sql文件的相關資料,DataGrip的導出功能也是相當強大,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • 數(shù)據(jù)庫設計經(jīng)驗談

    數(shù)據(jù)庫設計經(jīng)驗談

    這篇文章主要介紹了數(shù)據(jù)庫設計經(jīng)驗談的相關資料,需要的朋友可以參考下
    2007-03-03
  • 關于數(shù)據(jù)庫性能優(yōu)化中的表結(jié)構(gòu)優(yōu)化

    關于數(shù)據(jù)庫性能優(yōu)化中的表結(jié)構(gòu)優(yōu)化

    這篇文章主要介紹了關于數(shù)據(jù)庫性能優(yōu)化中的表結(jié)構(gòu)優(yōu)化,合理的表結(jié)構(gòu)設計可以提高數(shù)據(jù)庫的查詢效率和性能,而不合理的表結(jié)構(gòu)設計則可能導致查詢效率低下、數(shù)據(jù)冗余、數(shù)據(jù)不一致等問題,需要的朋友可以參考下
    2023-07-07
  • 把Navicat中數(shù)據(jù)庫所有表導出的方法

    把Navicat中數(shù)據(jù)庫所有表導出的方法

    通過Navicat導出數(shù)據(jù)庫中的數(shù)據(jù)是比較常用的操作之一,下面這篇文章主要給大家介紹了關于如何把Navicat中數(shù)據(jù)庫所有表導出的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • 也許是被忽略的update語句(update技巧)

    也許是被忽略的update語句(update技巧)

    這篇文章主要介紹了也許是被忽略的update語句,update語句就僅僅這樣嗎?它的精髓它的原理是什么呢?我們通過例子來說明
    2014-08-08
  • 使用DataGrip的詳細教程

    使用DataGrip的詳細教程

    這篇文章主要介紹了使用DataGrip的步驟詳解,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-09-09
  • 通過navicat導入sql文件的操作方法

    通過navicat導入sql文件的操作方法

    在很多項目當中都有sql文件導入到MySQL數(shù)據(jù)庫的需要,因為有sql數(shù)據(jù)庫文件,這個項目才能正常運行起來,那么現(xiàn)在就來學習一下怎么導入sql文件到navicat里面吧,需要的朋友可以參考下
    2024-03-03

最新評論

南宁市| 马山县| 昭苏县| 启东市| 漠河县| 册亨县| 丽江市| 青龙| 汤阴县| 清苑县| 津南区| 巴青县| 新竹市| 丹寨县| 衡阳市| 泉州市| 托克逊县| 汉中市| 万载县| 武山县| 桃园县| 红原县| 石景山区| 双江| 张家界市| 泽库县| 鸡西市| 昌邑市| 建德市| 镇远县| 沂南县| 祁东县| 安泽县| 昌江| 富蕴县| 肃宁县| 雷波县| 施甸县| 新津县| 辛集市| 泗阳县|