十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶(hù) + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂(yōu)售后,網(wǎng)站問(wèn)題一站解決
NoSQL,泛指非關(guān)系型的數(shù)據(jù)庫(kù)。隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)在應(yīng)付web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類(lèi)型的web2.0純動(dòng)態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問(wèn)題,而非關(guān)系型的數(shù)據(jù)庫(kù)則由于其本身的特點(diǎn)得到了非常迅速的發(fā)展。NoSQL數(shù)據(jù)庫(kù)的產(chǎn)生就是為了解決大規(guī)模數(shù)據(jù)集合多重?cái)?shù)據(jù)種類(lèi)帶來(lái)的挑戰(zhàn),尤其是大數(shù)據(jù)應(yīng)用難題。
專(zhuān)注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)臨猗免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了1000+企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
雖然NoSQL流行語(yǔ)火起來(lái)才短短一年的時(shí)間,但是不可否認(rèn),現(xiàn)在已經(jīng)開(kāi)始了第二代運(yùn)動(dòng)。盡管早期的堆棧代碼只能算是一種實(shí)驗(yàn),然而現(xiàn)在的系統(tǒng)已經(jīng)更加的成熟、穩(wěn)定。不過(guò)現(xiàn)在也面臨著一個(gè)嚴(yán)酷的事實(shí):技術(shù)越來(lái)越成熟——以至于原來(lái)很好的NoSQL數(shù)據(jù)存儲(chǔ)不得不進(jìn)行重寫(xiě),也有少數(shù)人認(rèn)為這就是所謂的2.0版本。這里列出一些比較知名的工具,可以為大數(shù)據(jù)建立快速、可擴(kuò)展的存儲(chǔ)庫(kù)。
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,是一項(xiàng)全新的數(shù)據(jù)庫(kù)革命性運(yùn)動(dòng),早期就有人提出,發(fā)展至2009年趨勢(shì)越發(fā)高漲。NoSQL的擁護(hù)者們提倡運(yùn)用非關(guān)系型的數(shù)據(jù)存儲(chǔ),相對(duì)于鋪天蓋地的關(guān)系型數(shù)據(jù)庫(kù)運(yùn)用,這一概念無(wú)疑是一種全新的思維的注入。
對(duì)于NoSQL并沒(méi)有一個(gè)明確的范圍和定義,但是他們都普遍存在下面一些共同特征:
不需要預(yù)定義模式:不需要事先定義數(shù)據(jù)模式,預(yù)定義表結(jié)構(gòu)。數(shù)據(jù)中的每條記錄都可能有不同的屬性和格式。當(dāng)插入數(shù)據(jù)時(shí),并不需要預(yù)先定義它們的模式。
無(wú)共享架構(gòu):相對(duì)于將所有數(shù)據(jù)存儲(chǔ)的存儲(chǔ)區(qū)域網(wǎng)絡(luò)中的全共享架構(gòu)。NoSQL往往將數(shù)據(jù)劃分后存儲(chǔ)在各個(gè)本地服務(wù)器上。因?yàn)閺谋镜卮疟P(pán)讀取數(shù)據(jù)的性能往往好于通過(guò)網(wǎng)絡(luò)傳輸讀取數(shù)據(jù)的性能,從而提高了系統(tǒng)的性能。
彈性可擴(kuò)展:可以在系統(tǒng)運(yùn)行的時(shí)候,動(dòng)態(tài)增加或者刪除結(jié)點(diǎn)。不需要停機(jī)維護(hù),數(shù)據(jù)可以自動(dòng)遷移。
分區(qū):相對(duì)于將數(shù)據(jù)存放于同一個(gè)節(jié)點(diǎn),NoSQL數(shù)據(jù)庫(kù)需要將數(shù)據(jù)進(jìn)行分區(qū),將記錄分散在多個(gè)節(jié)點(diǎn)上面。并且通常分區(qū)的同時(shí)還要做復(fù)制。這樣既提高了并行性能,又能保證沒(méi)有單點(diǎn)失效的問(wèn)題。
異步復(fù)制:和RAID存儲(chǔ)系統(tǒng)不同的是,NoSQL中的復(fù)制,往往是基于日志的異步復(fù)制。這樣,數(shù)據(jù)就可以盡快地寫(xiě)入一個(gè)節(jié)點(diǎn),而不會(huì)被網(wǎng)絡(luò)傳輸引起遲延。缺點(diǎn)是并不總是能保證一致性,這樣的方式在出現(xiàn)故障的時(shí)候,可能會(huì)丟失少量的數(shù)據(jù)。
BASE:相對(duì)于事務(wù)嚴(yán)格的ACID特性,NoSQL數(shù)據(jù)庫(kù)保證的是BASE特性。BASE是最終一致性和軟事務(wù)。
NoSQL數(shù)據(jù)庫(kù)并沒(méi)有一個(gè)統(tǒng)一的架構(gòu),兩種NoSQL數(shù)據(jù)庫(kù)之間的不同,甚至遠(yuǎn)遠(yuǎn)超過(guò)兩種關(guān)系型數(shù)據(jù)庫(kù)的不同??梢哉f(shuō),NoSQL各有所長(zhǎng),成功的NoSQL必然特別適用于某些場(chǎng)合或者某些應(yīng)用,在這些場(chǎng)合中會(huì)遠(yuǎn)遠(yuǎn)勝過(guò)關(guān)系型數(shù)據(jù)庫(kù)和其他的NoSQL。
即非關(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)銷(xiāo)很?。ㄏ嗤淖侄位旧现挥幸惶帲?;可以進(jìn)行Join等復(fù)雜查詢(xún)
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ù)讀取速度要快得多,滿(mǎn)足了高響應(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在很大程度上滿(mǎn)足了高并發(fā)、快速讀/和響應(yīng)的要求,所以它也是Java互聯(lián)網(wǎng)系統(tǒng)的利器。
簡(jiǎn)單的擴(kuò)展:典型例子是Cassandra,由于其架構(gòu)是類(lèi)似于經(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依賴(lài)于BASE模型——基本可用、軟狀態(tài)、最終一致性)。
但如果要保證到“始終一致”,尤其是對(duì)于機(jī)密信息和財(cái)務(wù)信息,那么MySQL很可能是最優(yōu)的選擇(MySQL依賴(lài)于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)定、便于查詢(xún),可以保證數(shù)據(jù)的一致性,但缺乏靈活性。
NoSQL高性能、高擴(kuò)展、高可用,不用局限于固定的結(jié)構(gòu),減少了時(shí)間和空間上的開(kāi)銷(xiāo),卻又很難保證數(shù)據(jù)一致性。
————————————————
版權(quán)聲明:本文為CSDN博主「蒟蒻熊」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:
何玩轉(zhuǎn) NoSQL數(shù)據(jù)庫(kù)作者:IT專(zhuān)家中國(guó) Weather公司CIO Bryson Koehler整理MongoDBRiakCassandra等NoSQL數(shù)據(jù)庫(kù)特性指其重要特性NoSQL限制住 Weather公司致力于氣報(bào)告氣預(yù)報(bào)業(yè)務(wù)其并缺乏數(shù)據(jù)缺乏數(shù)據(jù)管理工具需要三種同NoSQL數(shù)據(jù)庫(kù) 近我向Weather 公司CIO Bryson Koehler提疑問(wèn)除公司CIO,Bryson Koehler其業(yè)務(wù)單元孵化者,包括Weather ChannelWeatherFXWeather UndergroundIntellicast等Weather公司每獲取處理著約二0萬(wàn)億字節(jié)數(shù)據(jù)外提供前全球氣狀況并航空公司緊中國(guó)服務(wù)貨運(yùn)商公用事業(yè)保險(xiǎn)及線(xiàn)氣中國(guó)站氣應(yīng)用程序用戶(hù)提供氣預(yù)報(bào)服務(wù)每需求增加數(shù)十億氣數(shù)據(jù)請(qǐng)求并且預(yù)期響應(yīng)間要一0毫秒左右 RiakWeather 公司臺(tái)NoSQL數(shù)據(jù)庫(kù)服務(wù)于公司事務(wù)性存儲(chǔ)公用中國(guó)絡(luò)(SUN)數(shù)據(jù)獲取平臺(tái)運(yùn)行亞馬遜中國(guó)絡(luò)服務(wù)(AWS)用區(qū)域并每一5頻率捕獲超二0億氣象數(shù)據(jù)信息所Riak具明確處理規(guī)模該公司使用Cassandra及新近添加MongoDB數(shù)據(jù)庫(kù)Weather中國(guó) IOSAndroid移應(yīng)用程序服務(wù) Weather 公司使用同產(chǎn)品Koehler解釋說(shuō)同工具同優(yōu)勢(shì) Cassandra服務(wù)于Weather 公司及全球消費(fèi)者使用第三氣應(yīng)用API數(shù)據(jù):我數(shù)據(jù)發(fā)平臺(tái)每秒處理數(shù)十萬(wàn)事務(wù)我發(fā)現(xiàn)Cassandra用于全球發(fā)數(shù)據(jù)棒解決案并且[數(shù)據(jù)庫(kù)]讀取面體現(xiàn)高用性 本質(zhì)全球各消費(fèi)者所使用數(shù)據(jù)服務(wù)包括Weather 公司第三氣應(yīng)用程序 MongoDB提供Weather中國(guó)中國(guó)站移應(yīng)用程序間層緩存功能:離我核API我沒(méi)全部Weather中國(guó)內(nèi)容所MongoDB容器發(fā)站W(wǎng)eather中國(guó)及AndroidiOS移應(yīng)用程序服務(wù)Mongo處些處基于其內(nèi)建JSON格式及靈性 Riak用于消費(fèi)氣象數(shù)據(jù)觀測(cè)包括自世界各圖片視頻等:我喜Riak其優(yōu)秀數(shù)據(jù)攝取能力且種全球布式式實(shí)現(xiàn)于全球布式平臺(tái)獲取數(shù)據(jù)入站式數(shù)據(jù)庫(kù)真靠選擇 我曾聽(tīng)說(shuō)DatastaxBashoCouchbase高管貶低MongoDB擴(kuò)展性MongoDB指向規(guī)模部署Facebook超二00萬(wàn)臺(tái)移設(shè)備應(yīng)用程序提供支持eHarmony公司MongDB每處理著數(shù)十億潛比賽預(yù)約據(jù)Koehle所述MongoDBWeather中國(guó)Weather中國(guó)移應(yīng)用程序處理著每十億交易毫疑問(wèn)通配置部署Mongo處理批量交易數(shù)據(jù) 盡管Koehler承認(rèn)樂(lè)于看MongoDB繼續(xù)使全球集群位置[功能]更加縫化且易于使用 些屬于全球性布式集群復(fù)制負(fù)載平衡CassandraRiak眾所周知功能 規(guī)模討論角度看少公司達(dá)Weather公司經(jīng)營(yíng)規(guī)模易于發(fā)架構(gòu)靈性JSON數(shù)據(jù)處理使MongoDB世界流行NoSQL數(shù)據(jù)庫(kù)微軟IBM都進(jìn)行MongoDB模仿微軟Azure DocumentDBIBM CloudantCassandraRiak Weather公司三NoSQL標(biāo)準(zhǔn)降低至兩程鞏固Koehler說(shuō)公司沒(méi)準(zhǔn)備做 由于我構(gòu)造由許同數(shù)據(jù)解決案組中國(guó)狀結(jié)構(gòu)我目前環(huán)境已于復(fù)雜說(shuō)我希望給團(tuán)隊(duì)些自由空間讓我解所選擇利弊看些整合 候遷移件難事關(guān)于NoSQL數(shù)據(jù)庫(kù)重要事情困其 Koehler說(shuō)架構(gòu)編碼確數(shù)據(jù)庫(kù)遷移另并難隨著模式自由及數(shù)據(jù)轉(zhuǎn)存技術(shù)發(fā)展論前者key-value存儲(chǔ)或其形式轉(zhuǎn)儲(chǔ)數(shù)據(jù)都十容易 特定產(chǎn)品進(jìn)程自定義編碼復(fù)雜存儲(chǔ)程已經(jīng)復(fù)返Koehler說(shuō)關(guān)于結(jié)構(gòu)化編碼確需要考慮?做避免特殊供應(yīng)商提供工具功能能讓身陷其舉亞馬遜中國(guó)絡(luò)服務(wù)(AWS)消息服務(wù)例 必讓服務(wù)云運(yùn)行解釋說(shuō)部署自RabbitMQ環(huán)境陷于其所原先部署AWS 應(yīng)用程序轉(zhuǎn)部署谷歌計(jì)算云服務(wù)論數(shù)據(jù)平臺(tái)存儲(chǔ)環(huán)境或云計(jì)算環(huán)境都要?jiǎng)e讓自局限僅由供應(yīng)商提供范圍空間內(nèi) 轉(zhuǎn)
1. 使用python腳本可以輕松生成滿(mǎn)足條件的數(shù)據(jù),具體如下
#coding: utf-8import os, sys, time, datetimefrom itertools import izipN = 100000000def gen_meid(): returndef gen_seq(): returndef generate_message(meid,seq): ts = time.time(); time_st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S') print '/t'.join(( meid, seq, '/N', '/N', '/N', '/N', '0', '0', '0', '0', time_st, '/N', '/N', '0', '/N', '/N', '/N', '/N', time_st ))def main(args): print '/t'.join(( 'deviceID', 'battery', ... , 'accumulatedTime', 'createDate' )) // for mongodb, mysql delete for meid,seq in izip(gen_meid(),gen_seq()): generate_message(meid,seq) pass return 0#==============================if __name__ == "__main__": import sys main(sys.argv) pass#==============================
$ python a.py device.tsv
2. 切分?jǐn)?shù)據(jù)(可選)
tail -n +1 device.csv | head -n 5000000 part1.txt
tail -n +100001 device.csv | head -n 100000 part2.txt
tail -n +200001 device.csv | head -n 100000 part3.txt
tail -n +300001 device.csv | head -n 100000 part4.txt
3. 生成txt 文件
python a.py device.txt
每種nosql都有自己的語(yǔ)法。跟t-sql類(lèi)數(shù)據(jù)庫(kù)的方式類(lèi)似。但。不是用sql語(yǔ)句。而是他自身定義的讀取語(yǔ)句
Web1.0的時(shí)代,數(shù)據(jù)訪問(wèn)量很有限,用一夫當(dāng)關(guān)的高性能的單點(diǎn)服務(wù)器可以解決大部分問(wèn)題。
隨著Web2.0的時(shí)代的到來(lái),用戶(hù)訪問(wèn)量大幅度提升,同時(shí)產(chǎn)生了大量的用戶(hù)數(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 不依賴(lài)業(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)