天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

關系數據庫還是NoSQL數據庫

  上一篇簡單的說明了為什么要使用NoSQL。接下來我們看下如何把NoSQL引入到我們的項目中,我們到底要不要把NoSQL引入到項目中。

  在過去,我們只需要學習和使用一種數據庫技術,就能做幾乎所有的數據庫應用開發(fā)。因為成熟穩(wěn)定的關系數據庫產品并不是很多,而供你選擇的免費版本就更加少了,所以互聯網領域基本上都選擇了免費的MySQL數據庫。在高速發(fā)展的WEB2.0時代,我們發(fā)現關系數據庫在性能、擴展性、數據的快速備份和恢復、滿足需求的易用性上并不總是能很好的滿足我們的需要,我們越來越趨向于根據業(yè)務場景選擇合適的數據庫,以及進行多種數據庫的融合運用。幾年前的一篇文章《One Size Fits All - An Idea Whose Time Has Come and Gone》就已經闡述了這個觀點。

  當我們在討論是否要使用NoSQL的時候,你還需要理解NoSQL也是分很多種類的,在NoSQL百花齊放的今天,NoSQL的正確選擇比選擇關系數據庫還具有挑戰(zhàn)性。雖然NoSQL的使用很簡單,但是選擇卻是個麻煩事,這也正是很多人在觀望的一個原因。

  NoSQL的分類

  NoSQL僅僅是一個概念,NoSQL數據庫根據數據的存儲模型和特點分為很多種類。

類型

部分代表

特點

存儲

Hbase

Cassandra

Hypertable

顧名思義,是按列存儲數據的。最大的特點是方便存儲結構化和半結構化數據,方便做數據壓縮,對針對某一列或者某幾列的查詢有非常大的IO優(yōu)勢。

文檔存儲

MongoDB

CouchDB

文檔存儲一般用類似json的格式存儲存儲的內容是文檔型的。這樣也就有有機會對某些字段建立索引,實現關系數據庫的某些功能。

key-value存儲

Tokyo CabiNET / Tyrant

Berkeley DB

MemcacheDB

Redis

可以通過key快速查詢到其value。一般來說,存儲不管value的格式,照單全收。(Redis包含了其他功能)

存儲

Neo4J

FlockDB

圖形關系的最佳存儲。使用傳統(tǒng)關系數據庫來解決的話性能低下,而且設計使用不方便。

對象存儲

db4o

Versant

通過類似面向對象語言的語法操作數據庫,通過對象的方式存取數據。

xml數據庫

Berkeley DB XML

BaseX

高效的存儲XML數據,并支持XML的內部查詢語法,比如XQuery,Xpath。

  以上NoSQL數據庫類型的劃分并不是絕對,只是從存儲模型上來進行的大體劃分。它們之間沒有絕對的分界,也有交差的情況,比如Tokyo CabiNET / Tyrant的Table類型存儲,就可以理解為是文檔型存儲,Berkeley DB XML數據庫是基于Berkeley DB之上開發(fā)的。

  NoSQL還是關系數據庫

  雖然09年出現了比較激進的文章《關系數據庫已死》,但是我們心里都清楚,關系數據庫其實還活得好好的,你還不能不用關系數據庫。但是也說明了一個事實,關系數據庫在處理WEB2.0數據的時候,的確已經出現了瓶頸。

  那么我們到底是用NoSQL還是關系數據庫呢?我想我們沒有必要來進行一個絕對的回答。我們需要根據我們的應用場景來決定我們到底用什么。

  如果關系數據庫在你的應用場景中,完全能夠很好的工作,而你又是非常善于使用和維護關系數據庫的,那么我覺得你完全沒有必要遷移到NoSQL上面,除非你是個喜歡折騰的人。如果你是在金融,電信等以數據為王的關鍵領域,目前使用的是Oracle數據庫來提供高可靠性的,除非遇到特別大的瓶頸,不然也別貿然嘗試NoSQL。

  然而,在WEB2.0的網站中,關系數據庫大部分都出現了瓶頸。在磁盤IO、數據庫可擴展上都花費了開發(fā)人員相當多的精力來優(yōu)化,比如做分表分庫(database sharding)、主從復制、異構復制等等,然而,這些工作需要的技術能力越來越高,也越來越具有挑戰(zhàn)性。如果你正在經歷這些場合,那么我覺得你應該嘗試一下NoSQL了。

  選擇合適的NoSQL

  如此多類型的NoSQL,而每種類型的NoSQL又有很多,到底選擇什么類型的NoSQL來作為我們的存儲呢?這并不是一個很好回答的問題,影響我們選擇的因素有很多,而選擇也可能有多種,隨著業(yè)務場景,需求的變更可能選擇又會變化。我們常常需要根據如下情況考慮:

  1. 數據結構特點。包括結構化、半結構化、字段是否可能變更、是否有大文本字段、數據字段是否可能變化。
  2. 寫入特點。包括insert比例、update比例、是否經常更新數據的某一個小字段、原子更新需求。
  3. 查詢特點。包括查詢的條件、查詢熱點的范圍。比如用戶信息的查詢,可能就是隨機的,而新聞的查詢就是按照時間,越新的越頻繁。

  NoSQL和關系數據庫結合

  其實NoSQL數據庫僅僅是關系數據庫在某些方面(性能,擴展)的一個彌補,單從功能上講,NoSQL的幾乎所有的功能,在關系數據庫上都能夠滿足,所以選擇NoSQL的原因并不在功能上。

  所以,我們一般會把NoSQL和關系數據庫進行結合使用,各取所長,需要使用關系特性的時候我們使用關系數據庫,需要使用NoSQL特性的時候我們使用NoSQL數據庫,各得其所。

  舉個簡單的例子吧,比如用戶評論的存儲,評論大概有主鍵id、評論的對象aid、評論內容content、用戶uid等字段。我們能確定的是評論內容content肯定不會在數據庫中用where content=’’查詢,評論內容也是一個大文本字段。那么我們可以把 主鍵id、評論對象aid、用戶id存儲在數據庫,評論內容存儲在NoSQL,這樣數據庫就節(jié)省了存儲content占用的磁盤空間,從而節(jié)省大量IO,對content也更容易做Cache。

//從MySQL中查詢出評論主鍵id列表 
commentIds=DB.query("SELECT id FROM comments where aid='評論對象id' LIMIT 0,20");
//根據主鍵id列表,從NoSQL取回評論實體數據
CommentsList=NoSQL.get(commentIds);

it知識庫關系數據庫還是NoSQL數據庫,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 色爱区综合激情五月综合激情 | 香蕉eeww99国产精选播放 | 色偷偷av男人的天堂 | 99久久精品免费看国产免费 | 日日噜噜夜夜躁躁狠狠 | yellow免费影视大全 | 超碰免费视频caopoom9 | 草莓视频免费在线观看 | 国产成人在线视频网站 | 广东95后小情侣酒店自拍流出 | 久久成人国产精品一区二区 | 中文字幕亚洲无线码高清不卡 | 国产成人刺激视频在线观看 | 色姐妹久久综合在线av | 妹妹我要色 | 蜜桃AV色欲A片精品一区 | 凌晨三点免费WWW | 国产精品A久久久久久久久 国产精品A久久777777 | a亚洲在线观看不卡高清 | av无码在线日本天堂 | 中字幕视频在线永久在线 | 亚洲精品国产专区91在线 | 5G在线观看免费年龄确认18 | 99这里有精品视频视频 | 韩国电影real在线观看完整版 | 日韩精品一卡二卡三卡四卡2021 | 国产成人拍精品免费视频爱情岛 | 最美女人体内射精一区二区 | 2020国产成人精品免费视频 | 99国产精品综合AV无码 | 最新国产精品视频免费看 | 美女扒开屁股让男人桶 | 亚洲国产高清福利视频 | 国产亚洲精品久久久久久久 | 伊人久久中文大香线蕉综合 | 天天色天天干天天 | 国产色情短视频在线网站 | 亚洲综合中文字幕无线码 | 国产AV精品国语对白国产 | 69精品人妻一区二区三区蜜桃 | 国产高清精品自在久久 |