NoSQL,指的是非關(guān)系型的數(shù)據(jù)庫(kù)。NoSQL有時(shí)也稱作Not Only SQL的縮寫(xiě),是對(duì)不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)管理系統(tǒng)的統(tǒng)稱。
創(chuàng)新互聯(lián)成立于2013年,先為樂(lè)清等服務(wù)建站,樂(lè)清等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為樂(lè)清企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
NoSQL用于超大規(guī)模數(shù)據(jù)的存儲(chǔ)。(例如谷歌或Facebook每天為他們的用戶收集萬(wàn)億比特的數(shù)據(jù))。這些類型的數(shù)據(jù)存儲(chǔ)不需要固定的模式,無(wú)需多余操作就可以橫向擴(kuò)展。
NoSQL的優(yōu)點(diǎn)/缺點(diǎn)
優(yōu)點(diǎn):
- 高可擴(kuò)展性
- 分布式計(jì)算
- 低成本
- 架構(gòu)的靈活性,半結(jié)構(gòu)化數(shù)據(jù)
- 沒(méi)有復(fù)雜的關(guān)系
缺點(diǎn):
- 沒(méi)有標(biāo)準(zhǔn)化
- 有限的查詢功能(到目前為止)
- 最終一致是不直觀的程序 (BY三人行慕課)
即非關(guān)系型數(shù)據(jù)庫(kù)和關(guān)系型數(shù)據(jù)庫(kù)。
MySQL的優(yōu)點(diǎn):事務(wù)處理—保持?jǐn)?shù)據(jù)的一致性;由于以標(biāo)準(zhǔn)化為前提,數(shù)據(jù)更新的開(kāi)銷很?。ㄏ嗤淖侄位旧现挥幸惶帲?;可以進(jìn)行Join等復(fù)雜查詢
NoSQL的優(yōu)點(diǎn):首先它是基于內(nèi)存的,也就是數(shù)據(jù)放在內(nèi)存中,而不是像數(shù)據(jù)庫(kù)那樣把數(shù)據(jù)放在磁盤(pán)上,而內(nèi)存的讀取速度是磁盤(pán)讀取速度的幾十倍到上百倍,所以NoSQL工具的速度遠(yuǎn)比數(shù)據(jù)庫(kù)讀取速度要快得多,滿足了高響應(yīng)的要求。即使NoSQL將數(shù)據(jù)放在磁盤(pán)中,它也是一種半結(jié)構(gòu)化的數(shù)據(jù) 格式,讀取到解析的復(fù)雜度遠(yuǎn)比MySQL要簡(jiǎn)單,這是因?yàn)镸ySQL存儲(chǔ)的是經(jīng)過(guò)結(jié)構(gòu)化、多范式等有復(fù)雜規(guī)則的數(shù)據(jù),還原為內(nèi)存結(jié)構(gòu)的速度較慢。NoSQL在很大程度上滿足了高并發(fā)、快速讀/和響應(yīng)的要求,所以它也是Java互聯(lián)網(wǎng)系統(tǒng)的利器。
簡(jiǎn)單的擴(kuò)展:典型例子是Cassandra,由于其架構(gòu)是類似于經(jīng)典的P2P,所以能通過(guò)輕松地添加新的節(jié)點(diǎn)來(lái)擴(kuò)展這個(gè)集群;
低廉的成本:這是大多數(shù)分布式數(shù)據(jù)庫(kù)共有的特點(diǎn),因?yàn)橹饕际情_(kāi)源軟件,沒(méi)有昂貴的License成本;
NoSQL的缺點(diǎn):大多數(shù)NoSQL數(shù)據(jù)庫(kù)都不支持事務(wù),也不像 SQL Server和Oracle那樣能提供各種附加功能,比如BI和報(bào)表等; 不提供對(duì)SQL的支持
那么該如何選擇?
如果規(guī)模和性能比24小時(shí)的數(shù)據(jù)一致性更重要,那NoSQL是一個(gè)理想的選擇 (NoSQL依賴于BASE模型——基本可用、軟狀態(tài)、最終一致性)。
但如果要保證到“始終一致”,尤其是對(duì)于機(jī)密信息和財(cái)務(wù)信息,那么MySQL很可能是最優(yōu)的選擇(MySQL依賴于ACID模型——原子性、一致性、獨(dú)立性和耐久性)。
如果關(guān)系數(shù)據(jù)庫(kù)在你的應(yīng)用場(chǎng)景中,完全能夠很好的工作,而你又是非常善于使用和維護(hù)關(guān)系數(shù)據(jù)庫(kù)的,那么我覺(jué)得你完全沒(méi)有必要遷移到NoSQL上面,除非你是個(gè)喜歡折騰的人。如果你是在金融,電信等以數(shù)據(jù)為王的關(guān)鍵領(lǐng)域,目前使用的是Oracle數(shù)據(jù)庫(kù)來(lái)提供高可靠性的,除非遇到特別大的瓶頸,不然也別貿(mào)然嘗試NoSQL。
然而,在WEB2.0的網(wǎng)站中,關(guān)系數(shù)據(jù)庫(kù)大部分都出現(xiàn)了瓶頸。在磁盤(pán)IO、數(shù)據(jù)庫(kù)可擴(kuò)展上都花費(fèi)了開(kāi)發(fā)人員相當(dāng)多的精力來(lái)優(yōu)化,比如做分表分庫(kù)(database sharding)、主從復(fù)制、異構(gòu)復(fù)制等等,然而,這些工作需要的技術(shù)能力越來(lái)越高,也越來(lái)越具有挑戰(zhàn)性。如果你正在經(jīng)歷這些場(chǎng)合,那么我覺(jué)得你應(yīng)該嘗試一下NoSQL了。
具體問(wèn)題具體分析
MySQL體積小、速度快、成本低、結(jié)構(gòu)穩(wěn)定、便于查詢,可以保證數(shù)據(jù)的一致性,但缺乏靈活性。
NoSQL高性能、高擴(kuò)展、高可用,不用局限于固定的結(jié)構(gòu),減少了時(shí)間和空間上的開(kāi)銷,卻又很難保證數(shù)據(jù)一致性。
————————————————
版權(quán)聲明:本文為CSDN博主「蒟蒻熊」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:
mongodb 現(xiàn)在應(yīng)該是運(yùn)用的最多的 nosql 數(shù)據(jù)庫(kù),所謂的優(yōu)點(diǎn)自然就是nosql數(shù)據(jù)庫(kù)的優(yōu)點(diǎn)
NewSQL是對(duì)一類現(xiàn)代關(guān)系型數(shù)據(jù)庫(kù)的統(tǒng)稱,這類數(shù)據(jù)庫(kù)對(duì)于一般的OLTP讀寫(xiě)請(qǐng)求提供可橫向擴(kuò)展的性能,同時(shí)支持事務(wù)的ACID保證。這些系統(tǒng)既擁有NoSQL數(shù)據(jù)庫(kù)的擴(kuò)展性,又保持傳統(tǒng)數(shù)據(jù)庫(kù)的事務(wù)特性。NewSQL重新將“應(yīng)用程序邏輯與數(shù)據(jù)操作邏輯應(yīng)該分離”的理念帶回到現(xiàn)代數(shù)據(jù)庫(kù)的世界,這也驗(yàn)證了歷史的發(fā)展總是呈現(xiàn)出螺旋上升的形式。
在21世紀(jì)00年代中,出現(xiàn)了許多數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng) (如 Vertica,Greeplum 和AsterData),這些以處理OLAP 請(qǐng)求為設(shè)計(jì)目標(biāo)的系統(tǒng)并不在本文定義的NewSQL范圍內(nèi)。OLAP 數(shù)據(jù)庫(kù)更關(guān)注針對(duì)海量數(shù)據(jù)的大型、復(fù)雜、只讀的查詢,查詢時(shí)間可能持續(xù)秒級(jí)、分鐘級(jí)甚至更長(zhǎng)。
NoSQL的擁躉普遍認(rèn)為阻礙傳統(tǒng)數(shù)據(jù)庫(kù)橫向擴(kuò)容、提高可用性的原因在于ACID保證和關(guān)系模型,因此NoSQL運(yùn)動(dòng)的核心就是放棄事務(wù)強(qiáng)一致性以及關(guān)系模型,擁抱最終一致性和其它數(shù)據(jù)模型?(如 key/value,graphs 和Documents)。
兩個(gè)最著名的NoSQL數(shù)據(jù)庫(kù)就是Google的BigTable和Amazon的Dynamo,由于二者都未開(kāi)源,其它組織就開(kāi)始推出類似的開(kāi)源替代項(xiàng)目,包括Facebook的 Cassandra (基于BigTable和Dynamo)、PowerSet的 Hbase(基于BigTable)。有一些創(chuàng)業(yè)公司也加入到這場(chǎng)NoSQL運(yùn)動(dòng)中,它們不一定是受BigTable和Dynamo的啟發(fā),但都響應(yīng)了NoSQL的哲學(xué),其中最出名的就是MongoDB。
在21世紀(jì)00年代末,市面上已經(jīng)有許多供用戶選擇的分布式數(shù)據(jù)庫(kù)產(chǎn)品。使用NoSQL的優(yōu)勢(shì)在于應(yīng)用開(kāi)發(fā)者可以更關(guān)注應(yīng)用邏輯本身,而非數(shù)據(jù)庫(kù)的擴(kuò)展性問(wèn)題;但與此同時(shí)許多應(yīng)用,如金融系統(tǒng)、訂單處理系統(tǒng),由于無(wú)法放棄事務(wù)的一致性要求被拒之門(mén)外。
一些組織,如Google,已經(jīng)發(fā)現(xiàn)他們的許多工程師將過(guò)多的精力放在處理數(shù)據(jù)一致性上,這既暴露了數(shù)據(jù)庫(kù)的抽象、又提高了代碼的復(fù)雜度,這時(shí)候要么選擇回到傳統(tǒng)DBMS時(shí)代,用更高的機(jī)器配置縱向擴(kuò)容,要么選擇回到中間件時(shí)代,開(kāi)發(fā)支持分布式事務(wù)的中間件。這兩種方案成本都很高,于是NewSQL運(yùn)動(dòng)開(kāi)始醞釀。
NewSQL數(shù)據(jù)庫(kù)設(shè)計(jì)針對(duì)的讀寫(xiě)事務(wù)有以下特點(diǎn):
1、耗時(shí)短。
2、使用索引查詢,涉及少量數(shù)據(jù)。
3、重復(fù)度高,通常使用相同的查詢語(yǔ)句和不同的查詢參考。
也有一些學(xué)者認(rèn)為NewSQL系統(tǒng)是特指實(shí)現(xiàn)上使用Lock-free并發(fā)控制技術(shù)和share-nothing架構(gòu)的數(shù)據(jù)庫(kù)。所有我們認(rèn)為是NewSQL的數(shù)據(jù)庫(kù)系統(tǒng)確實(shí)都有這樣的特點(diǎn)。
NoSQL太火,冒出太多產(chǎn)品了,保守估計(jì)也成百上千了。
互聯(lián)網(wǎng)公司常用的基本集中在以下幾種,每種只舉一個(gè)比較常見(jiàn)或者應(yīng)用比較成功的例子吧。
1. In-Memory KV Store : Redis
in memory key-value store,同時(shí)提供了更加豐富的數(shù)據(jù)結(jié)構(gòu)和運(yùn)算的能力,成功用法是替代memcached,通過(guò)checkpoint和commit log提供了快速的宕機(jī)恢復(fù),同時(shí)支持replication提供讀可擴(kuò)展和高可用。
2. Disk-Based KV Store: Leveldb
真正基于磁盤(pán)的key-value storage, 模型單一簡(jiǎn)單,數(shù)據(jù)量不受限于內(nèi)存大小,數(shù)據(jù)落盤(pán)高可靠,Google的幾位大神出品的精品,LSM模型天然寫(xiě)優(yōu)化,順序?qū)懕P(pán)的方式對(duì)于新硬件ssd再適合不過(guò)了,不足是僅提供了一個(gè)庫(kù),需要自己封裝server端。
3. Document Store: Mongodb
分布式nosql,具備了區(qū)別mysql的最大亮點(diǎn):可擴(kuò)展性。mongodb 最新引人的莫過(guò)于提供了sql接口,是目前nosql里最像mysql的,只是沒(méi)有ACID的特性,發(fā)展很快,支持了索引等特性,上手容易,對(duì)于數(shù)據(jù)量遠(yuǎn)超內(nèi)存限制的場(chǎng)景來(lái)說(shuō),還需要慎重。
4. Column Table Store: HBase
這個(gè)富二代似乎不用贅述了,最大的優(yōu)勢(shì)是開(kāi)源,對(duì)于普通的scan和基于行的get等基本查詢,性能完全不是問(wèn)題,只是只提供裸的api,易用性上是短板,可擴(kuò)展性方面是最強(qiáng)的,其次坐上了Hadoop的快車,社區(qū)發(fā)展很快,各種基于其上的開(kāi)源產(chǎn)品不少,來(lái)解決諸如join、聚集運(yùn)算等復(fù)雜查詢。
Web1.0的時(shí)代,數(shù)據(jù)訪問(wèn)量很有限,用一夫當(dāng)關(guān)的高性能的單點(diǎn)服務(wù)器可以解決大部分問(wèn)題。
隨著Web2.0的時(shí)代的到來(lái),用戶訪問(wèn)量大幅度提升,同時(shí)產(chǎn)生了大量的用戶數(shù)據(jù)。加上后來(lái)的智能移動(dòng)設(shè)備的普及,所有的互聯(lián)網(wǎng)平臺(tái)都面臨了巨大的性能挑戰(zhàn)。
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,泛指非關(guān)系型的數(shù)據(jù)庫(kù)。
NoSQL 不依賴業(yè)務(wù)邏輯方式存儲(chǔ),而以簡(jiǎn)單的key-value模式存儲(chǔ)。因此大大的增加了數(shù)據(jù)庫(kù)的擴(kuò)展能力。
Memcache Memcache Redis Redis MongoDB MongoDB 列式數(shù)據(jù)庫(kù) 列式數(shù)據(jù)庫(kù) Hbase Hbase
HBase是Hadoop項(xiàng)目中的數(shù)據(jù)庫(kù)。它用于需要對(duì)大量的數(shù)據(jù)進(jìn)行隨機(jī)、實(shí)時(shí)的讀寫(xiě)操作的場(chǎng)景中。
HBase的目標(biāo)就是處理數(shù)據(jù)量非常龐大的表,可以用普通的計(jì)算機(jī)處理超過(guò)10億行數(shù)據(jù),還可處理有數(shù)百萬(wàn)列元素的數(shù)據(jù)表。
Cassandra Cassandra
Apache Cassandra是一款免費(fèi)的開(kāi)源NoSQL數(shù)據(jù)庫(kù),其設(shè)計(jì)目的在于管理由大量商用服務(wù)器構(gòu)建起來(lái)的龐大集群上的海量數(shù)據(jù)集(數(shù)據(jù)量通常達(dá)到PB級(jí)別)。在眾多顯著特性當(dāng)中,Cassandra最為卓越的長(zhǎng)處是對(duì)寫(xiě)入及讀取操作進(jìn)行規(guī)模調(diào)整,而且其不強(qiáng)調(diào)主集群的設(shè)計(jì)思路能夠以相對(duì)直觀的方式簡(jiǎn)化各集群的創(chuàng)建與擴(kuò)展流程。
主要應(yīng)用:社會(huì)關(guān)系,公共交通網(wǎng)絡(luò),地圖及網(wǎng)絡(luò)拓譜(n*(n-1)/2)