什么是NoSQL數(shù)據(jù)庫?從名稱“非SQL”或“非關(guān)系型”衍生而來,這些數(shù)據(jù)庫不使用類似SQL的查詢語言,通常稱為結(jié)構(gòu)化存儲(chǔ)。這些數(shù)據(jù)庫自1960年就已經(jīng)存在,但是直到現(xiàn)在一些大公司(例如Google和Facebook)開始使用它們時(shí),這些數(shù)據(jù)庫才流行起來。該數(shù)據(jù)庫最明顯的優(yōu)勢是擺脫了一組固定的列、連接和類似SQL的查詢語言的限制。有時(shí),NoSQL這個(gè)名稱也可能表示“不僅僅SQL”,來確保它們可能支持SQL。 NoSQL數(shù)據(jù)庫使用諸如鍵值、寬列、圖形或文檔之類的數(shù)據(jù)結(jié)構(gòu),并且可以如JSON之類的不同格式存儲(chǔ)。
成都創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作與策劃設(shè)計(jì),德欽網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:德欽等地區(qū)。德欽做網(wǎng)站價(jià)格咨詢:028-86922220
對于第一個(gè)問題,設(shè)計(jì)一個(gè)schema-(messageID,likedCount),記錄每條微博的點(diǎn)贊數(shù)。messageID是微博的編號(hào),likedCount是該微博的點(diǎn)贊人數(shù)。但是這里有兩個(gè)問題需要解決,第一是并發(fā),第二是數(shù)據(jù)量。
每條微博都有可能有很多人同時(shí)點(diǎn)贊,為了保證點(diǎn)贊人數(shù)精確就需要保證likedCount++是原子操作,這個(gè)可以由應(yīng)用程序來實(shí)現(xiàn),也可以用redis的事務(wù)來實(shí)現(xiàn)(如果redis有事務(wù)機(jī)制或者自增功能的話),但是我覺得為了性能考慮,也可以不用實(shí)現(xiàn)原子操作,具體原因就不展開了。
每天都上億可能更多的微博內(nèi)容產(chǎn)生,這樣就會(huì)有上億個(gè)新的(messageID,likedCount)生成,這樣的數(shù)據(jù)量是比較大的,單機(jī)數(shù)據(jù)庫比較難提供高效的服務(wù),所以需要采取sharding的功能(有時(shí)候也叫分表分庫),可能根據(jù)messageID把這些schema分散到十個(gè)或者更多的shards上(據(jù)說,sina微博有600個(gè)節(jié)點(diǎn),如何三個(gè)節(jié)點(diǎn)組成一個(gè)shard,就有200個(gè)shards),這樣每個(gè)shard處理的請求就只有原來的十分之一,從而就能提高服務(wù)的性能。
關(guān)于點(diǎn)贊人列表的設(shè)計(jì),一般來說,可能想到的schema是(messageID,userID),但是這樣的設(shè)計(jì)有一個(gè)小問題,就是有些大發(fā)的微博可能會(huì)得到幾十萬的點(diǎn)贊,這樣就會(huì)產(chǎn)生幾十萬個(gè)條數(shù)據(jù),這樣數(shù)據(jù)有點(diǎn)多,讀取起來可能也慢。所以可以用這樣一個(gè)schema(messageID,partID,userIDs),讓一個(gè)messageID對于多個(gè)userID,同時(shí)比對應(yīng)太多的userID,所以加入一個(gè)新的partID,一個(gè)part存1000個(gè)userID,這樣幾十萬個(gè)點(diǎn)贊,只需要存幾百條數(shù)據(jù)。這樣做還有一個(gè)好處,用戶點(diǎn)擊查看點(diǎn)贊人時(shí)的,一般都不是完全顯示所有點(diǎn)贊人,而是一批一批顯示,這樣可以一次只讀一條數(shù)據(jù),就可顯示一批點(diǎn)贊用戶信息。
Web1.0的時(shí)代,數(shù)據(jù)訪問量很有限,用一夫當(dāng)關(guān)的高性能的單點(diǎn)服務(wù)器可以解決大部分問題。
隨著Web2.0的時(shí)代的到來,用戶訪問量大幅度提升,同時(shí)產(chǎn)生了大量的用戶數(shù)據(jù)。加上后來的智能移動(dòng)設(shè)備的普及,所有的互聯(lián)網(wǎng)平臺(tái)都面臨了巨大的性能挑戰(zhàn)。
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,泛指非關(guān)系型的數(shù)據(jù)庫。
NoSQL 不依賴業(yè)務(wù)邏輯方式存儲(chǔ),而以簡單的key-value模式存儲(chǔ)。因此大大的增加了數(shù)據(jù)庫的擴(kuò)展能力。
Memcache Memcache Redis Redis MongoDB MongoDB 列式數(shù)據(jù)庫 列式數(shù)據(jù)庫 Hbase Hbase
HBase是Hadoop項(xiàng)目中的數(shù)據(jù)庫。它用于需要對大量的數(shù)據(jù)進(jìn)行隨機(jī)、實(shí)時(shí)的讀寫操作的場景中。
HBase的目標(biāo)就是處理數(shù)據(jù)量非常龐大的表,可以用普通的計(jì)算機(jī)處理超過10億行數(shù)據(jù),還可處理有數(shù)百萬列元素的數(shù)據(jù)表。
Cassandra Cassandra
Apache Cassandra是一款免費(fèi)的開源NoSQL數(shù)據(jù)庫,其設(shè)計(jì)目的在于管理由大量商用服務(wù)器構(gòu)建起來的龐大集群上的海量數(shù)據(jù)集(數(shù)據(jù)量通常達(dá)到PB級(jí)別)。在眾多顯著特性當(dāng)中,Cassandra最為卓越的長處是對寫入及讀取操作進(jìn)行規(guī)模調(diào)整,而且其不強(qiáng)調(diào)主集群的設(shè)計(jì)思路能夠以相對直觀的方式簡化各集群的創(chuàng)建與擴(kuò)展流程。
主要應(yīng)用:社會(huì)關(guān)系,公共交通網(wǎng)絡(luò),地圖及網(wǎng)絡(luò)拓譜(n*(n-1)/2)
思路如下:
1 數(shù)據(jù)庫要以某種格式保存到磁盤上
2 有利于對數(shù)據(jù)的保存,查詢以及修改的語法
3 要支持高級(jí)編程語言,結(jié)合應(yīng)用程序的api接口