Apache三劍客:HBase, Cassandra, CouchDB。HBase的前景最為看好,因為它的開發(fā)者眾多并且都是頂尖高手。Cassandra目前有很多否定的聲音。CouchDB的小而精悍,贊譽(yù)很多,將要正式發(fā)布的CouchBase融合了MemBase和CouchDB,很令人期待。
成都創(chuàng)新互聯(lián)主要從事網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)召陵,十載網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
HBase和Cassandra都是效仿Google的BigTable的基于列的數(shù)據(jù)庫,它們都是用Java寫的。另外一類似的數(shù)據(jù)庫是HyperTable,百度用在一些后臺分析,因為它是C++寫的,速度比較快。不過HyperTable有點(diǎn)邊緣,不太流行。這些基于列的開源數(shù)據(jù)庫目前都比Goolge的BigTable差之少一個數(shù)量級
CouchDB是一個文檔數(shù)據(jù)庫。其最大的競爭者是MongoDB。MongoDB和HBase都采用主從服務(wù)器設(shè)計。CouchDB的服務(wù)器分布設(shè)計和Cassandra類似,Peer to Peer類型的。主從服務(wù)器設(shè)計一般能更好的strong consistent,屬于CAP理論中的CP類型。 CouchDB和Cassandra一般認(rèn)為都是eventual consistent,屬于CAP理論中的AP類型。但其實(shí)MongoDB和Cassandra都可以設(shè)置成strong consistent或者eventual consistent。
以上所提到的數(shù)據(jù)庫都支持MapReduce。好像出了HyperTable都支持非主鍵索引。HBase和strong consistent配置的MongoDB都支持最基本的鎖定(HBase單行鎖定,MongoDB單文檔鎖定),因此可以實(shí)現(xiàn)transaction,但是實(shí)現(xiàn)有點(diǎn)復(fù)雜和低效。單就transaction這一點(diǎn),目前開源NoSQL數(shù)據(jù)庫沒有做的比較好的。
MongoDB的最大賣點(diǎn)是不需構(gòu)建非主鍵索引也能執(zhí)行很多查詢。但是MongoDB的服務(wù)器分布設(shè)計實(shí)在不能讓人恭維,可以說是NoSQL數(shù)據(jù)庫中最Ugly的實(shí)現(xiàn)。
K-V數(shù)據(jù)庫比較多,而且上面提到的基于列的數(shù)據(jù)庫和文檔數(shù)據(jù)庫其實(shí)也都是K-V數(shù)據(jù)庫。比較流行的純種K-V數(shù)據(jù)庫有:
Memcached: 非常流行,不支持持久化
VMWare's Redis: 很流行,新浪和知乎都在用,CP類型。
MemBase: 由很多Memcached的開發(fā)者開發(fā),使用sqlite作底層存儲。在社交游戲中用的比較多, zynga在用,CP類型。
Riak, 分布式實(shí)現(xiàn)和CouchDB/Cassandra比較像,AP類型。支持MapReduce。
Linkin's Voldemort, 在K-V中少見的eventual consistent ,AP類型。
TT, TC
純基于二維座標(biāo)索引的是Neo4j。但是現(xiàn)在MongoDB和CouchDB都集成這一特性。
目前CouchDB的開發(fā)者成立的公司CouchOne收購了MemBase,將其底層sqlite換成CouchDB推出了CouchBase,從而引入MapReduce以支持非主鍵索引。CouchBase暫時還沒有正式發(fā)布官方正式版,不過快了。雖然CouchDB是eventual consistent的,但是CouchBase的開發(fā)者宣稱CouchBase保持了MemBase的strong consistent特性,具體實(shí)現(xiàn)有待以后研究。
如果從成熟的角度來看,比較成熟并且十分流行的的有CouchDB,Memcached,Redis。
HBase和MongonDB和Cassandra都比較新,處于頻繁更新之中。最有前途的是HBase,但是Hadoop/HBase集群的維護(hù)常常需要很多專業(yè)人員并且需要構(gòu)建一個比較大的集群才能最大化體現(xiàn)出威力,因此用戶主要是Facebook, yahoo, 百度和阿里巴巴等大公司。
個人比較期待CouchBase。
轉(zhuǎn)載僅供參考,版權(quán)屬于原作者。祝你愉快,滿意請~~哦
當(dāng)然不一定咯。。
設(shè)置不設(shè)置主鍵嘛。。。要看你的業(yè)務(wù)或者需求來說。。。
如果你就是簡單的對單表操作的話,實(shí)在沒有必要。
對多張沒有關(guān)聯(lián)的表操作的話,不設(shè)置也沒有什么影響
主鍵只是說對一種表和表關(guān)系的關(guān)聯(lián)而已,還有就是在建主鍵的時候會自動添加個索引,某些情況下可以增加查詢速度
不是必須有主鍵,但是最好設(shè)置主鍵
可行,但是這個沒有主鍵的表的該列必須是唯一列,也就是說值不能重復(fù),這樣的話也就是說得建立主鍵
一、概念
SQL?(Structured?Query?Language)?數(shù)據(jù)庫,指關(guān)系型數(shù)據(jù)庫。主要代表:SQL?Server,Oracle,MySQL(開源),PostgreSQL(開源)。
NoSQL(Not?Only?SQL)泛指非關(guān)系型數(shù)據(jù)庫。主要代表:MongoDB,Redis,CouchDB。
二、區(qū)別
1、存儲方式
SQL數(shù)據(jù)存在特定結(jié)構(gòu)的表中;而NoSQL則更加靈活和可擴(kuò)展,存儲方式可以省是JSON文檔、哈希表或者其他方式。SQL通常以數(shù)據(jù)庫表形式存儲數(shù)據(jù)。舉個栗子,存?zhèn)€學(xué)生借書數(shù)據(jù):
而NoSQL存儲方式比較靈活,比如使用類JSON文件存儲上表中熊大的借閱數(shù)據(jù):
2、表/數(shù)據(jù)集合的數(shù)據(jù)的關(guān)系
在SQL中,必須定義好表和字段結(jié)構(gòu)后才能添加數(shù)據(jù),例如定義表的主鍵(primary?key),索引(index),觸發(fā)器(trigger),存儲過程(stored?procedure)等。表結(jié)構(gòu)可以在被定義之后更新,但是如果有比較大的結(jié)構(gòu)變更的話就會變得比較復(fù)雜。在NoSQL中,數(shù)據(jù)可以在任何時候任何地方添加,不需要先定義表。例如下面這段代碼會自動創(chuàng)建一個新的"借閱表"數(shù)據(jù)集合:
NoSQL也可以在數(shù)據(jù)集中建立索引。以MongoDB為例,會自動在數(shù)據(jù)集合創(chuàng)建后創(chuàng)建唯一值_id字段,這樣的話就可以在數(shù)據(jù)集創(chuàng)建后增加索引。
從這點(diǎn)來看,NoSQL可能更加適合初始化數(shù)據(jù)還不明確或者未定的項目中。
3、外部數(shù)據(jù)存儲
SQL中如何需要增加外部關(guān)聯(lián)數(shù)據(jù)的話,規(guī)范化做法是在原表中增加一個外鍵,關(guān)聯(lián)外部數(shù)據(jù)表。例如需要在借閱表中增加審核人信息,先建立一個審核人表:
再在原來的借閱人表中增加審核人外鍵:
這樣如果我們需要更新審核人個人信息的時候只需要更新審核人表而不需要對借閱人表做更新。而在NoSQL中除了這種規(guī)范化的外部數(shù)據(jù)表做法以外,我們還能用如下的非規(guī)范化方式把外部數(shù)據(jù)直接放到原數(shù)據(jù)集中,以提高查詢效率。缺點(diǎn)也比較明顯,更新審核人數(shù)據(jù)的時候?qū)容^麻煩。
4、SQL中的JOIN查詢
SQL中可以使用JOIN表鏈接方式將多個關(guān)系數(shù)據(jù)表中的數(shù)據(jù)用一條簡單的查詢語句查詢出來。NoSQL暫未提供類似JOIN的查詢方式對多個數(shù)據(jù)集中的數(shù)據(jù)做查詢。所以大部分NoSQL使用非規(guī)范化的數(shù)據(jù)存儲方式存儲數(shù)據(jù)。
5、數(shù)據(jù)耦合性
SQL中不允許刪除已經(jīng)被使用的外部數(shù)據(jù),例如審核人表中的"熊三"已經(jīng)被分配給了借閱人熊大,那么在審核人表中將不允許刪除熊三這條數(shù)據(jù),以保證數(shù)據(jù)完整性。而NoSQL中則沒有這種強(qiáng)耦合的概念,可以隨時刪除任何數(shù)據(jù)。
6、事務(wù)
SQL中如果多張表數(shù)據(jù)需要同批次被更新,即如果其中一張表更新失敗的話其他表也不能更新成功。這種場景可以通過事務(wù)來控制,可以在所有命令完成后再統(tǒng)一提交事務(wù)。而NoSQL中沒有事務(wù)這個概念,每一個數(shù)據(jù)集的操作都是原子級的。
7、增刪改查語法
8、查詢性能
在相同水平的系統(tǒng)設(shè)計的前提下,因為NoSQL中省略了JOIN查詢的消耗,故理論上性能上是優(yōu)于SQL的。
當(dāng)前名稱:nosql有主鍵嗎,mysql一定要有主鍵嗎
分享URL:http://jinyejixie.com/article0/dssepoo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、用戶體驗、App開發(fā)、網(wǎng)站改版、定制網(wǎng)站、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)