nosql速度快,但是完成不了關(guān)系數(shù)據(jù)庫的復(fù)雜邏輯
成都創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司,專注成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站營銷推廣,空間域名,雅安服務(wù)器托管,綿陽服務(wù)器托管有關(guān)企業(yè)網(wǎng)站制作方案、改版、費(fèi)用等問題,請(qǐng)聯(lián)系成都創(chuàng)新互聯(lián)。
sql功能強(qiáng)大,但是效率上有瓶頸
看項(xiàng)目大小取舍
一樣是數(shù)據(jù)庫
NOSQL查詢速度快,但是占用空間也大(都去索引那邊了)
但是NOSQL查詢復(fù)雜的邏輯關(guān)系的時(shí)候,只能批量獲取到本地去統(tǒng)計(jì)而SQL能通過條件和關(guān)聯(lián)表等方式進(jìn)行篩選只顯示符合條件的語句。
NOSQL用于無條件或少條件下的存取。百億級(jí)數(shù)據(jù)也能快速取出。
SQL用于復(fù)雜的邏輯存取。在數(shù)據(jù)量不多的情況下也能跟NOSQL一樣用于數(shù)據(jù)存儲(chǔ)。
nosql 你可以想到就是座位號(hào)碼。
你給的是唯一碼,就能得到唯一碼對(duì)應(yīng)的相關(guān)信息。
與標(biāo)準(zhǔn)SQL不同,SQL,字段多少會(huì)左右查詢速度。
NOSQL則是以json類似的格式把全部字段用一個(gè)字符串展現(xiàn)出來。
以3億數(shù)據(jù)的表,你加上索引,查全部欄位。單個(gè)速度可能會(huì)很快。
如果多個(gè),哪怕有索引,恐怕也要幾百毫米。
而NOSQL則依次給你全部數(shù)據(jù)。你只需要程序上做出來就行。
存取速度大概小于10毫米。
不過NOSQL所占的硬盤空間,是普通SQL的好幾倍。。。。。。
nosql數(shù)據(jù)庫的四種類型如下:
1.key-value鍵值存儲(chǔ)數(shù)據(jù)庫:
相關(guān)產(chǎn)品: Redis、Riak、SimpleDB、Chordless、Scalaris、Memcached.
主要應(yīng)用: 內(nèi)容緩存,處理大量數(shù)據(jù)的高負(fù)載訪問,也用于系統(tǒng)日志。
優(yōu)點(diǎn):查找速度快,大量操作時(shí)性能高。
2.列存儲(chǔ)數(shù)據(jù)庫:
相關(guān)產(chǎn)品: BigTable、HBase、Cassandra、HadoopDB、GreenPlum、PNUTS.
主要應(yīng)用: 分布式數(shù)據(jù)的儲(chǔ)存與管理。
優(yōu)點(diǎn):查找速度快,可擴(kuò)展性強(qiáng),容易進(jìn)行分布式擴(kuò)展。
缺點(diǎn):功能相對(duì)局限。
3.文檔型數(shù)據(jù)庫
相關(guān)產(chǎn)品:MongoDB、CouchDB、ThruDB、CloudKit、Perservere、Jackrabbit.
主要應(yīng)用: web應(yīng)用,管理面向文檔的數(shù)據(jù)或者類似的半結(jié)構(gòu)化數(shù)據(jù)。
優(yōu)點(diǎn):數(shù)據(jù)結(jié)構(gòu)靈活,表結(jié)構(gòu)可變,復(fù)雜性低。
缺點(diǎn):查詢效率低,且缺乏統(tǒng)一的查詢語言。
4.Graph圖形數(shù)據(jù)庫
相關(guān)產(chǎn)品: Neo4J、OrientDB、InfoGrid、GraphDB.
主要應(yīng)用: 復(fù)雜,互連接,低結(jié)構(gòu)化的圖結(jié)構(gòu)場合, 專注構(gòu)建關(guān)系圖譜。
優(yōu)點(diǎn): 利用圖結(jié)構(gòu)相關(guān)算法, 可用于構(gòu)建復(fù)雜的關(guān)系圖譜。
缺點(diǎn): 復(fù)雜度高。
a. SQL數(shù)據(jù)存在特定結(jié)構(gòu)的表中;而NoSQL則更加靈活和可擴(kuò)展,存儲(chǔ)方式可以省是JSON文檔、哈希表或者其他方式。
b. 在SQL中,必須定義好表和字段結(jié)構(gòu)后才能添加數(shù)據(jù),例如定義表的主鍵(primary key),索引(index),觸發(fā)器(trigger),存儲(chǔ)過程(stored procedure)等。表結(jié)構(gòu)可以在被定義之后更新,但是如果有比較大的結(jié)構(gòu)變更的話就會(huì)變得比較復(fù)雜。在NoSQL中,數(shù)據(jù)可以在任何時(shí)候任何地方添加,不需要先定義表。
c. SQL中如果需要增加外部關(guān)聯(lián)數(shù)據(jù)的話,規(guī)范化做法是在原表中增加一個(gè)外鍵,關(guān)聯(lián)外部數(shù)據(jù)表。而在NoSQL中除了這種規(guī)范化的外部數(shù)據(jù)表做法以外,我們還能用如下的非規(guī)范化方式把外部數(shù)據(jù)直
接放到原數(shù)據(jù)集中,以提高查詢效率。缺點(diǎn)也比較明顯,更新審核人數(shù)據(jù)的時(shí)候?qū)?huì)比較麻煩。
d. SQL 中可以使用JOIN表鏈接方式將多個(gè)關(guān)系數(shù)據(jù)表中的數(shù)據(jù)用一條簡單的查詢語句查詢出來。NoSQL暫未提供類似JOIN的查詢方式對(duì)多個(gè)數(shù)據(jù)集中的數(shù)據(jù)做查詢。所以大部分NoSQL使用非規(guī)范化的數(shù)據(jù)存儲(chǔ)方式存儲(chǔ)數(shù)據(jù)。
e. SQL中不允許刪除已經(jīng)被使用的外部數(shù)據(jù),而NoSQL中則沒有這種強(qiáng)耦合的概念,可以隨時(shí)刪除任何數(shù)據(jù)。
f. SQL中如果多張表數(shù)據(jù)需要同批次被更新,即如果其中一張表更新失敗的話其他表也不能更新成功。這種場景可以通過事務(wù)來控制,可以在所有命令完成后再統(tǒng)一提交事務(wù)。而NoSQL中沒有事務(wù)這個(gè)概念,每一個(gè)數(shù)據(jù)集的操作都是原子級(jí)的。
g. 在相同水平的系統(tǒng)設(shè)計(jì)的前提下,因?yàn)镹oSQL中省略了JOIN查詢的消耗,故理論上性能上是優(yōu)于SQL的。