一,、關(guān)系型數(shù)據(jù)庫的優(yōu)缺點
關(guān)系型數(shù)據(jù)庫是建立在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫,借助于集合代數(shù)等數(shù)學(xué)概念和方法來處理數(shù)據(jù)庫中的數(shù)據(jù),。簡單說,,關(guān)系型數(shù)據(jù)庫是由多張能互相連接的表組成的數(shù)據(jù)庫,。
優(yōu)點:
1、都是使用表結(jié)構(gòu),,格式一致,,易于維護。
2,、使用通用的SQL語言操作,,使用方便,可用于復(fù)雜查詢,。
3,、數(shù)據(jù)存儲在磁盤中,安全,。
缺點:
1、讀寫性能比較差,,不能滿足海量數(shù)據(jù)的高效率讀寫,。
2、不節(jié)省空間,。因為建立在關(guān)系模型上,,就要遵循某些規(guī)則,比如數(shù)據(jù)中某字段值即使為空仍要分配空間,。
3,、固定的表結(jié)構(gòu),靈活度較低,。
常見的關(guān)系型數(shù)據(jù)庫有Oracle,、DB2、PostgreSQL,、MicrosoftSQLServer,、MicrosoftAccess和MySQL等。
二,、非關(guān)系型數(shù)據(jù)庫的優(yōu)缺點
非關(guān)系型數(shù)據(jù)庫又被稱為NoSQL(NotOnlySQL),,意為不僅僅是SQL。通常指數(shù)據(jù)以對象的形式存儲在數(shù)據(jù)庫中,,而對象之間的關(guān)系通過每個對象自身的屬性來決定,。
優(yōu)點:
1、非關(guān)系型數(shù)據(jù)庫存儲數(shù)據(jù)的格式可以是key-value形式,、文檔形式,、圖片形式等。使用靈活,,應(yīng)用場景廣泛,,而關(guān)系型數(shù)據(jù)庫則只支持基礎(chǔ)類型,。
2、速度快,,效率高,。NoSQL可以使用硬盤或者隨機存儲器作為載體,而關(guān)系型數(shù)據(jù)庫只能使用硬盤,。
3,、海量數(shù)據(jù)的維護和處理非常輕松。
4,、非關(guān)系型數(shù)據(jù)庫具有擴展簡單,、高并發(fā)、高穩(wěn)定性,、成本低廉的優(yōu)勢,。
5、可以實現(xiàn)數(shù)據(jù)的分布式處理,。
缺點:
1,、非關(guān)系型數(shù)據(jù)庫暫時不提供SQL支持,學(xué)習(xí)和使用成本較高,。
2,、非關(guān)系數(shù)據(jù)庫沒有事務(wù)處理,沒有保證數(shù)據(jù)的完整性和安全性,。適合處理海量數(shù)據(jù),,但是不一定安全。
3.功能沒有關(guān)系型數(shù)據(jù)庫完善,。
三,、關(guān)系型數(shù)據(jù)庫和nosql數(shù)據(jù)庫的區(qū)別
1、存儲方式
傳統(tǒng)的關(guān)系型數(shù)據(jù)庫采用表格的儲存方式,,數(shù)據(jù)以行和列的方式進行存儲,,要讀取和查詢都十分方便。而非關(guān)系型數(shù)據(jù)不適合這樣的表格存儲方式,,通常以數(shù)據(jù)集的方式,,大量的數(shù)據(jù)集中存儲在一起,類似于鍵值對,、圖結(jié)構(gòu)或者文檔,。
2、存儲結(jié)構(gòu)
關(guān)系型數(shù)據(jù)庫按照結(jié)構(gòu)化的方法存儲數(shù)據(jù),,每個數(shù)據(jù)表都必須對各個字段定義好(也就是先定義好表的結(jié)構(gòu)),,再根據(jù)表的結(jié)構(gòu)存入數(shù)據(jù),這樣做的好處就是由于數(shù)據(jù)的形式和內(nèi)容在存入數(shù)據(jù)之前就已經(jīng)定義好了,,所以整個數(shù)據(jù)表的可靠性和穩(wěn)定性都比較高,,但帶來的問題就是一旦存入數(shù)據(jù)后,,如果需要修改數(shù)據(jù)表的結(jié)構(gòu)就會十分困難。而NoSQL數(shù)據(jù)庫由于面對的是大量非結(jié)構(gòu)化的數(shù)據(jù)的存儲,,它采用的是動態(tài)結(jié)構(gòu),,對于數(shù)據(jù)類型和結(jié)構(gòu)的改變非常的適應(yīng),可以根據(jù)數(shù)據(jù)存儲的需要靈活的改變數(shù)據(jù)庫的結(jié)構(gòu),。
3,、存儲規(guī)范
關(guān)系型數(shù)據(jù)庫為了避免重復(fù)、規(guī)范化數(shù)據(jù)以及充分利用好存儲空間,,把數(shù)據(jù)按照最小關(guān)系表的形式進行存儲,,這樣數(shù)據(jù)管理的就可以變得很清晰、一目了然,,當(dāng)然這主要是一張數(shù)據(jù)表的情況,。如果是多張表情況就不一樣了,由于數(shù)據(jù)涉及到多張數(shù)據(jù)表,,數(shù)據(jù)表之間存在著復(fù)雜的關(guān)系,,隨著數(shù)據(jù)表數(shù)量的增加,數(shù)據(jù)管理會越來越復(fù)雜,。而NoSQL數(shù)據(jù)庫的數(shù)據(jù)存儲方式是用平面數(shù)據(jù)集的方式集中存放,雖然會存在數(shù)據(jù)被重復(fù)存儲,,從而造成存儲空間被浪費的問題(從當(dāng)前的計算機硬件的發(fā)展來看,,這樣的存儲空間浪費的問題微不足道),但是由于基本上單個數(shù)據(jù)庫都是采用單獨存放的形式,,很少采用分割存放的方式,,所以這樣數(shù)據(jù)往往能存成一個整體,這對于數(shù)據(jù)的讀寫提供了極大的方便,。
4,、擴展方式
當(dāng)前社會和科學(xué)飛速發(fā)展,要支持日益增長的數(shù)據(jù)庫存儲需求當(dāng)然要求數(shù)據(jù)庫有良好的擴展性能,,并且要求數(shù)據(jù)庫支持更多數(shù)據(jù)并發(fā)量,,擴展方式是NoSQL數(shù)據(jù)庫與關(guān)系型數(shù)據(jù)庫差別最大的地方,由于關(guān)系型數(shù)據(jù)庫將數(shù)據(jù)存儲在數(shù)據(jù)表中,,數(shù)據(jù)操作的瓶頸出現(xiàn)在多張數(shù)據(jù)表的操作中,,而且數(shù)據(jù)表越多這個問題越嚴(yán)重,如果要緩解這個問題,,只能提高處理能力,,也就是選擇速度更快性能更高的計算機,這樣的方法雖然可以一定的拓展空間,,但這樣的拓展空間一定有非常有限的,,也就是關(guān)系型數(shù)據(jù)庫只具備縱向擴展能力,。而NoSQL數(shù)據(jù)庫由于使用的是數(shù)據(jù)集的存儲方式,它的存儲方式一定是分布式的,,它可以采用橫向的方式來開展數(shù)據(jù)庫,,也就是可以添加更多數(shù)據(jù)庫服務(wù)器到資源池,然后由這些增加的服務(wù)器來負(fù)擔(dān)數(shù)據(jù)量增加的開銷,。
5,、查詢方式
關(guān)系型數(shù)據(jù)庫采用結(jié)構(gòu)化查詢語言(即SQL)來對數(shù)據(jù)庫進行查詢,SQL早已獲得了各個數(shù)據(jù)庫廠商的支持,,成為數(shù)據(jù)庫行業(yè)的標(biāo)準(zhǔn),,它能夠支持?jǐn)?shù)據(jù)庫的CRUD(增加,查詢,,更新,,刪除)操作,具有非常強大的功能,,SQL可以采用類似索引的方法來加快查詢操作,。NoSQL數(shù)據(jù)庫使用的是非結(jié)構(gòu)化查詢語言(UnQL),它以數(shù)據(jù)集(像文檔)為單位來管理和操作數(shù)據(jù),,由于它沒有一個統(tǒng)一的標(biāo)準(zhǔn),,所以每個數(shù)據(jù)庫廠商提供產(chǎn)品標(biāo)準(zhǔn)是不一樣的,NoSQL中的文檔Id與關(guān)系型表中主鍵的概念類似,,NoSQL數(shù)據(jù)庫采用的數(shù)據(jù)訪問模式相對SQL更簡單而精確,。
6、規(guī)范化
在數(shù)據(jù)庫的設(shè)計開發(fā)過程中開發(fā)人員通常會面對同時需要對一個或者多個數(shù)據(jù)實體(包括數(shù)組,、列表和嵌套數(shù)據(jù))進行操作,,這樣在關(guān)系型數(shù)據(jù)庫中,一個數(shù)據(jù)實體一般首先要分割成多個部分,,然后再對分割的部分進行規(guī)范化,,規(guī)范化以后再分別存入到多張關(guān)系型數(shù)據(jù)表中,這是一個復(fù)雜的過程,。好消息是隨著軟件技術(shù)的發(fā)展,,相當(dāng)多的軟件開發(fā)平臺都提供一些簡單的解決方法,例如,,可以利用ORM層(也就是對象關(guān)系映射)來將數(shù)據(jù)庫中對象模型映射到基于SQL的關(guān)系型數(shù)據(jù)庫中去以及進行不同類型系統(tǒng)的數(shù)據(jù)之間的轉(zhuǎn)換,。對于NoSQL數(shù)據(jù)庫則沒有這方面的問題,它不需要規(guī)范化數(shù)據(jù),,它通常是在一個單獨的存儲單元中存入一個復(fù)雜的數(shù)據(jù)實體,。
7、事務(wù)性
關(guān)系型數(shù)據(jù)庫強調(diào)ACID規(guī)則(原子性(Atomicity),、一致性(Consistency),、隔離性(Isolation),、持久性(Durability),可以滿足對事務(wù)性要求較高或者需要進行復(fù)雜數(shù)據(jù)查詢的數(shù)據(jù)操作,,而且可以充分滿足數(shù)據(jù)庫操作的高性能和操作穩(wěn)定性的要求。并且關(guān)系型數(shù)據(jù)庫十分強調(diào)數(shù)據(jù)的強一致性,,對于事務(wù)的操作有很好的支持,。關(guān)系型數(shù)據(jù)庫可以控制事務(wù)原子性細(xì)粒度,并且一旦操作有誤或者有需要,,可以馬上回滾事務(wù),。而NoSQL數(shù)據(jù)庫強調(diào)BASE原則(基本可用(Basically Available)、軟狀態(tài)(Soft-state),、最終一致性(Eventual Consistency),,它減少了對數(shù)據(jù)的強一致性支持,從而獲得了基本一致性和柔性可靠性,,并且利用以上的特性達到了高可靠性和高性能,,最終達到了數(shù)據(jù)的最終一致性,。NoSQL數(shù)據(jù)庫雖然對于事務(wù)操作也可以使用,,但由于它是一種基于節(jié)點的分布式數(shù)據(jù)庫,對于事務(wù)的操作不能很好的支持,,也很難滿足其全部的需求,所以NoSQL數(shù)據(jù)庫的性能和優(yōu)點更多的體現(xiàn)在大數(shù)據(jù)的處理和數(shù)據(jù)庫的擴展方面,。
8,、讀寫性能
關(guān)系型數(shù)據(jù)庫十分強調(diào)數(shù)據(jù)的一致性,,并為此降低讀寫性能付出了巨大的代價,,雖然關(guān)系型數(shù)據(jù)庫存儲數(shù)據(jù)和處理數(shù)據(jù)的可靠性很不錯,但一旦面對海量數(shù)據(jù)的處理的時候效率就會變得很差,,特別是遇到高并發(fā)讀寫的時候性能就會下降的非常厲害,。而NoSQL數(shù)據(jù)庫相對關(guān)系型數(shù)據(jù)庫優(yōu)勢最大的恰恰是應(yīng)對大數(shù)據(jù)方面,,也就是對于大量的每天都產(chǎn)生非結(jié)構(gòu)化的數(shù)據(jù)能夠高性能的讀寫,,這是因為NoSQL數(shù)據(jù)庫是按key-value類型進行存儲的,以數(shù)據(jù)集的方式存儲的,,因此無論是擴展還是讀寫都非常容易,,并且NoSQL數(shù)據(jù)庫不需要關(guān)系型數(shù)據(jù)庫繁瑣的解析,,所以NoSQL數(shù)據(jù)庫大數(shù)據(jù)管理、檢索,、讀寫,、分析以及可視化方面具有關(guān)系型數(shù)據(jù)庫不可比擬的優(yōu)勢。
9,、授權(quán)方式
關(guān)系型數(shù)據(jù)庫常見的有Oracle,,SQLServer,DB2,,Mysql,,除了Mysql大多數(shù)的關(guān)系型數(shù)據(jù)庫如果要使用都需要支付一筆價格高昂的費用,,即使是免費的Mysql性能也受到了諸多的限制,。而對于NoSQL數(shù)據(jù)庫,比較主流的有redis,,HBase,,MongoDb,memcache等產(chǎn)品,,通常都采用開源的方式,,不需要像關(guān)系型數(shù)據(jù)庫那樣,需要一筆高昂的花費,。