房地產(chǎn)電子商務(wù)的網(wǎng)站建設(shè)網(wǎng)頁做推廣
目錄
一、NoSQL概述
二、為什么用NoSQL?
三、NoSQL特點?
四、NoSQL的分類
五、NoSQL適用場景
六、NoSQL不適用場景
一、NoSQL概述
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,泛指非關(guān)系型的數(shù)據(jù)庫。
NoSQL 不依賴業(yè)務(wù)邏輯方式存儲,而以簡單的key-value模式存儲(數(shù)據(jù)存儲的類型不需要一個固定形式)。因此大大的增加了數(shù)據(jù)庫的擴展能力。
- 不遵循 SQL 標準
- 不支持 ACID
- 遠超于 SQL 的性能
二、為什么用NoSQL?
傳統(tǒng)的關(guān)系型數(shù)據(jù)庫如MySQL、SQL Server、Oracle等都是將復(fù)雜的數(shù)據(jù)結(jié)構(gòu)歸結(jié)為簡單的二元關(guān)系(即二維表形式),能夠使用SQL語句進行復(fù)雜的查詢并且支持事務(wù)。但是隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫在處理web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的社交網(wǎng)絡(luò)類型的web2.0純動態(tài)網(wǎng)站,面臨著很多諸如在巨大數(shù)據(jù)量下查詢緩慢,單一的關(guān)系型數(shù)據(jù)模型難以應(yīng)對數(shù)據(jù)種類復(fù)雜等情況。這時就需要用到NoSQL數(shù)據(jù)庫了。
NoSQL 對 SQL 做出了很好的補充。在實際開發(fā)中,有很多業(yè)務(wù)需求,并不需要完整的關(guān)系型數(shù)據(jù)庫功能,非關(guān)系型數(shù)據(jù)庫的功能就足夠使用了。這種情況下,使用性能更高、成本更低的非關(guān)系型數(shù)據(jù)庫當然是更明智的選擇。比如:日志收集、排行榜、定時器等。
三、NoSQL特點?
- 易擴展
NoSQL數(shù)據(jù)庫種類繁多,但是一個共同的特點都是去掉關(guān)系數(shù)據(jù)庫的關(guān)系型特性。數(shù)據(jù)之間無關(guān)系,這樣就非常容易擴展。
- 大數(shù)據(jù)量,高性能
NoSQL數(shù)據(jù)庫都具有非常高的讀寫性能,尤其在大數(shù)據(jù)量下,同樣表現(xiàn)優(yōu)秀。這得益于它的無關(guān)系性,數(shù)據(jù)庫的結(jié)構(gòu)簡單。(Redis 一秒寫8萬次,讀取11萬,NoSQL的緩存記錄級是細粒度的緩存,性能會比較高)
- 靈活的數(shù)據(jù)模型
NoSQL無須事先為要存儲的數(shù)據(jù)建立字段,隨時可以存儲自定義的數(shù)據(jù)格式。而在關(guān)系數(shù)據(jù)庫里,增刪字段是一件非常麻煩的事情。如果是非常大數(shù)據(jù)量的表,增加字段將會非常復(fù)雜且消耗時間,這點在大數(shù)據(jù)量的Web 2.0時代尤其明顯。
- 高可用
NoSQL在不太影響性能的情況,就可以方便地實現(xiàn)高可用的架構(gòu)。比如Cassandra、HBase模型,通過復(fù)制模型也能實現(xiàn)高可用。
四、NoSQL的分類
- 鍵值對存儲數(shù)據(jù)庫
????????鍵值型數(shù)據(jù)庫通過 Key-Value 鍵值的方式來存儲數(shù)據(jù),Key 作為唯一的標識符,優(yōu)點是查找速度快,在這方面明顯優(yōu)于關(guān)系型數(shù)據(jù)庫,缺點是無法像關(guān)系型數(shù)據(jù)庫一樣使用條件過濾(比如 WHERE),如果你不知道去哪里找數(shù)據(jù),就要遍歷所有的鍵,這就會消耗大量的計算。鍵值型數(shù)據(jù)庫典型的使用場景是作為內(nèi)存緩存。例如:Redis(Redis還支持事務(wù)和數(shù)據(jù)的持久化,能夠快速的增刪。應(yīng)用場景有排行榜、秒殺、抽獎。)
- 列存儲數(shù)據(jù)庫
? ? ? ?列式數(shù)據(jù)庫是相對于行式存儲的數(shù)據(jù)庫,Oracle、MySQL、SQL Server 等數(shù)據(jù)庫都是采用的行式存儲,而列式數(shù)據(jù)庫是將數(shù)據(jù)按照列存儲到數(shù)據(jù)庫中,這樣做的好處是可以大量降低系統(tǒng)的 I/O,適合于分布式文件系統(tǒng),不足在于功能相對有限。
- 文檔存儲數(shù)據(jù)庫
文檔型數(shù)據(jù)庫可存放并獲取文檔,可以是XML、JSON等格式。在數(shù)據(jù)庫中文檔作為處理信息的基本單位,一個文檔就相當于一條記錄。文檔數(shù)據(jù)庫所存放的文檔,就相當于鍵值數(shù)據(jù)庫所存放的“值”。例如:MongoDB(MongoDB是一個基于分布式文件存儲的數(shù)據(jù)庫。由C++語言編寫。旨在為WEB應(yīng)用提供可擴展的高性能數(shù)據(jù)存儲解決方案。Mongo最大的特點是它支持的查詢語言非常強大,在海量數(shù)據(jù)中查詢速度非???#xff0c;支持分布式文件系統(tǒng)。)
- 搜索引擎數(shù)據(jù)庫
????????關(guān)系型數(shù)據(jù)庫采用了索引提升檢索效率,但是針對全文索引效率卻較低。搜索引擎數(shù)據(jù)庫是應(yīng)用在搜索引擎領(lǐng)域的數(shù)據(jù)存儲形式,由于搜索引擎會爬取大量的數(shù)據(jù),并以特定的格式進行存儲,這樣在檢索的時候才能保證性能最優(yōu)。核心原理是“倒排索引”。
? ? ?(Elasticsearch是一個高擴展的分布式全文檢索引擎,它可以近乎實時的存儲、檢索數(shù)據(jù)。分布式實時文件存儲,并將每一個字段都編入索引,使其可以被搜索。
實時分析的分布式搜索引擎??梢詳U展到上百臺服務(wù)器,處理PB級別的結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)。)
- HBASE
? ? ? ?HBASE是一個高可靠性、高性能、面向列、可伸縮的非關(guān)系型數(shù)據(jù)庫,利用 Hadoop 分布式文件系統(tǒng)(Hadoop Distributed File System,HDFS)提供分布式數(shù)據(jù)存儲,一個表可以有上十億行,上百萬列。在實時讀寫、隨機訪問超大規(guī)模數(shù)據(jù)集方面十分優(yōu)秀,多用于數(shù)據(jù)分析、數(shù)據(jù)挖掘。
- 圖形數(shù)據(jù)庫
? ? ? ?圖形數(shù)據(jù)庫,利用了圖這種數(shù)據(jù)結(jié)構(gòu)存儲了實體(對象)之間的關(guān)系。圖形數(shù)據(jù)庫最典型的例子就是社交網(wǎng)絡(luò)中人與人的關(guān)系,數(shù)據(jù)模型主要是以節(jié)點和邊(關(guān)系)來實現(xiàn),特點在于能高效地解決復(fù)雜的關(guān)系問題。如社交網(wǎng)絡(luò)中人物之間的關(guān)系,如果用關(guān)系型數(shù)據(jù)庫則非常復(fù)雜,用圖形數(shù)據(jù)庫將非常簡單。Neo4j是一款強健的,可伸縮的基于Java語言編寫的高性能圖數(shù)據(jù)庫。能夠高效的解決復(fù)雜的數(shù)據(jù)關(guān)系。比如好友推薦、商品推薦等就是使用了基于Neo4j的智能推薦引擎。
五、NoSQL適用場景
- 對數(shù)據(jù)高并發(fā)的讀寫
- 海量數(shù)據(jù)的讀寫
- 對數(shù)據(jù)高可擴展性
六、NoSQL不適用場景
- 需要事務(wù)支持
- 基于 sql 的結(jié)構(gòu)化查詢存儲,處理復(fù)雜的關(guān)系,需要即席查詢
注:即席查詢(Ad Hoc)是用戶根據(jù)自己的需求,靈活的選擇查詢條件,系統(tǒng)能夠根據(jù)用戶的選擇生成相應(yīng)的統(tǒng)計報表。