資源描述:
《一網(wǎng)打盡當(dāng)下NoSQL類型、適用場景及使用公司》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、摘要:對比傳統(tǒng)關(guān)系型數(shù)據(jù)庫,NoSQL有著更為復(fù)雜的分類——鍵值、面向文檔、列存儲以及圖數(shù)據(jù)庫。這里就帶你一覽NoSQL各種類型的適用場景及一些知名公司的方案選擇。在過去幾年,關(guān)系型數(shù)據(jù)庫一直是數(shù)據(jù)持久化的唯一選擇,數(shù)據(jù)工作者考慮的也只是在這些傳統(tǒng)數(shù)據(jù)庫中做篩選,比如SQLServer、Oracle或者是MySQL。甚至是做一些默認的選擇,比如使用.NET的一般會選擇SQLServer;使用Java的可能會偏向Oracle,Ruby是MySQL,Python則是PostgreSQL或MySQL等等。原因很簡單:過去很長
2、一段時間內(nèi),關(guān)系數(shù)據(jù)庫的健壯性已經(jīng)在多數(shù)應(yīng)用程序中得到證實。我們可以使用這些傳統(tǒng)數(shù)據(jù)庫良好的控制并發(fā)操作、事務(wù)等等。然而如果傳統(tǒng)的關(guān)系型數(shù)據(jù)庫一直這么可靠,那么還有NoSQL什么事?NoSQL之所以生存并得到發(fā)展,是因為它做到了傳統(tǒng)關(guān)系型數(shù)據(jù)庫做不到的事!關(guān)系型數(shù)據(jù)庫中存在的問題ImpedanceMismatch我們使用Python、Ruby、Java、.Net等語言編寫應(yīng)用程序,這些語言有一個共同的特性——面向?qū)ο?。但是我們使用MySQL、PostgreSQL、Oracle以及SQLServer,這些數(shù)據(jù)庫同樣有一個
3、共同的特性——關(guān)系型數(shù)據(jù)庫。這里就牽扯到了“ImpedanceMismatch”這個術(shù)語:存儲結(jié)構(gòu)是面向?qū)ο蟮模菙?shù)據(jù)庫卻是關(guān)系的,所以在每次存儲或者查詢數(shù)據(jù)時,我們都需要做轉(zhuǎn)換。類似Hibernate、EntityFramework這樣的ORM框架確實可以簡化這個過程,但是在對查詢有高性能需求時,這些ORM框架就捉襟見肘了。應(yīng)用程序規(guī)模的變大網(wǎng)絡(luò)應(yīng)用程序的規(guī)模日漸變大,我們需要儲存更多的數(shù)據(jù)、服務(wù)更多的用戶以及需求更多的計算能力。為了應(yīng)對這種情形,我們需要不停的擴展。擴展分為兩類:一種是縱向擴展,即購買更好的機器,
4、更多的磁盤、更多的內(nèi)存等等;另一種是橫向擴展,即購買更多的機器組成集群。在巨大的規(guī)模下,縱向擴展發(fā)揮的作用并不是很大。首先單機器性能提升需要巨額的開銷并且有著性能的上限,在Google和Facebook這種規(guī)模下,永遠不可能使用一臺機器支撐所有的負載。鑒于這種情況,我們需要新的數(shù)據(jù)庫,因為關(guān)系數(shù)據(jù)庫并不能很好的運行在集群上。不錯你也可能會去搭建關(guān)系數(shù)據(jù)庫集群,但是他們使用的是共享存儲,這并不是我們想要的類型。于是就有了以Google、Facebook、Amazon這些試圖處理更多傳輸所引領(lǐng)的NoSQL紀元。NoSQL紀
5、元當(dāng)下已經(jīng)存在很多的NoSQL數(shù)據(jù)庫,比如MongoDB、Redis、Riak、HBase、Cassandra等等。每一個都擁有以下幾個特性中的一個:·不再使用SQL語言,比如MongoDB、Cassandra就有自己的查詢語言·通常是開源項目·為集群運行而生·弱結(jié)構(gòu)化——不會嚴格的限制數(shù)據(jù)結(jié)構(gòu)類型NoSQL數(shù)據(jù)庫的類型NoSQL可以大體上分為4個種類:Key-value、Document-Oriented、Column-FamilyDatabases以及Graph-OrientedDatabases。下面就一覽這些類
6、型的特性:一、鍵值(Key-Value)數(shù)據(jù)庫鍵值數(shù)據(jù)庫就像在傳統(tǒng)語言中使用的哈希表。你可以通過key來添加、查詢或者刪除數(shù)據(jù),鑒于使用主鍵訪問,所以會獲得不錯的性能及擴展性。產(chǎn)品:Riak、Redis、Memcached、Amazon’sDynamo、ProjectVoldemort有誰在使用:GitHub(Riak)、BestBuy(Riak)、Twitter(Redis和Memcached)、StackOverFlow(Redis)、Instagram(Redis)、Youtube(Memcached)、Wiki
7、pedia(Memcached)適用的場景儲存用戶信息,比如會話、配置文件、參數(shù)、購物車等等。這些信息一般都和ID(鍵)掛鉤,這種情景下鍵值數(shù)據(jù)庫是個很好的選擇。不適用場景1.取代通過鍵查詢,而是通過值來查詢。Key-Value數(shù)據(jù)庫中根本沒有通過值查詢的途徑。2.需要儲存數(shù)據(jù)之間的關(guān)系。在Key-Value數(shù)據(jù)庫中不能通過兩個或以上的鍵來關(guān)聯(lián)數(shù)據(jù)。3.事務(wù)的支持。在Key-Value數(shù)據(jù)庫中故障產(chǎn)生時不可以進行回滾。二、面向文檔(Document-Oriented)數(shù)據(jù)庫面向文檔數(shù)據(jù)庫會將數(shù)據(jù)以文檔的形式儲存。每個文
8、檔都是自包含的數(shù)據(jù)單元,是一系列數(shù)據(jù)項的集合。每個數(shù)據(jù)項都有一個名稱與對應(yīng)的值,值既可以是簡單的數(shù)據(jù)類型,如字符串、數(shù)字和日期等;也可以是復(fù)雜的類型,如有序列表和關(guān)聯(lián)對象。數(shù)據(jù)存儲的最小單位是文檔,同一個表中存儲的文檔屬性可以是不同的,數(shù)據(jù)可以使用XML、JSON或者JSONB等多種形式存儲。產(chǎn)品:MongoDB、CouchDB、