1. 程式人生 > >四種NoSQL資料庫型別

四種NoSQL資料庫型別

在過去幾年,關係型資料庫一直是資料持久化的唯一選擇,資料工作者考慮的也只是在這些傳統資料庫中做篩選,比如SQL Server、Oracle或者是MySQL。甚至是做一些預設的選擇,比如使用.NET的一般會選擇SQL Server;使用Java的可能會偏向Oracle,Ruby是MySQL,Python則是PostgreSQL或MySQL等等。

原因很簡單:過去很長一段時間內,關係資料庫的健壯性已經在多數應用程式中得到證實。我們可以使用這些傳統資料庫良好的控制併發操作、事務等等。然而如果傳統的關係型資料庫一直這麼可靠,那麼還有NoSQL什麼事?NoSQL之所以生存並得到發展,是因為它做到了傳統關係型資料庫做不到的事!

關係型資料庫中存在的問題

Impedance Mismatch

 

我們使用Python、Ruby、Java、.Net等語言編寫應用程式,這些語言有一個共同的特性——面向物件。但是我們使用MySQL、PostgreSQL、Oracle以及SQL Server,這些資料庫同樣有一個共同的特性——關係型資料庫。這裡就牽扯到了“Impedance Mismatch”這個術語:儲存結構是面向物件的,但是資料庫卻是關係的,所以在每次儲存或者查詢資料時,我們都需要做轉換。類似hibernate、Entity Framework這樣的ORM框架確實可以簡化這個過程,但是在對查詢有高效能需求時,這些ORM框架就捉襟見肘了。

應用程式規模的變大

網路應用程式的規模日漸變大,我們需要儲存更多的資料、服務更多的使用者以及需求更多的計算能力。為了應對這種情形,我們需要不停的擴充套件。擴充套件分為兩類:一種是縱向擴充套件,即購買更好的機器,更多的磁碟、更多的記憶體等等;另一種是橫向擴充套件,即購買更多的機器組成叢集。在巨大的規模下,縱向擴充套件發揮的作用並不是很大。首先單機器效能提升需要鉅額的開銷並且有著效能的上限,在Google和Facebook這種規模下,永遠不可能使用一臺機器支撐所有的負載。鑑於這種情況,我們需要新的資料庫,因為關係資料庫並不能很好的執行在叢集上。不錯你也可能會去搭建關係資料庫叢集,但是他們使用的是共享儲存,這並不是我們想要的型別。於是就有了以Google、Facebook、Amazon這些試圖處理更多傳輸所引領的NoSQL紀元。

NoSQL紀元

當下已經存在很多的NoSQL資料庫,比如MongoDBRedis、Riak、Hbase、Cassandra等等。每一個都擁有以下幾個特性中的一個:

  • 不再使用SQL語言,比如MongoDB、Cassandra就有自己的查詢語言
  • 通常是開源專案
  • 為叢集執行而生
  • 弱結構化——不會嚴格的限制資料結構型別

NoSQL資料庫的型別

NoSQL可以大體上分為4個種類:Key-value、Document-Oriented、Column-Family Databases以及 Graph-Oriented Databases。下面就一覽這些型別的特性:

一、 鍵值(Key-Value)資料庫

鍵值資料庫就像在傳統語言中使用的雜湊表。你可以通過key來新增、查詢或者刪除資料,鑑於使用主鍵訪問,所以會獲得不錯的效能及擴充套件性。

產品:Riak、Redis、Memcached、Amazon’s Dynamo、Project Voldemort

有誰在使用:GitHub (Riak)、BestBuy (Riak)、Twitter (Redis和Memcached)、StackOverFlow (Redis)、 Instagram (Redis)、Youtube (Memcached)、Wikipedia(Memcached)

適用的場景

儲存使用者資訊,比如會話、配置檔案、引數、購物車等等。這些資訊一般都和ID(鍵)掛鉤,這種情景下鍵值資料庫是個很好的選擇。

不適用場景

1. 取代通過鍵查詢,而是通過值來查詢。Key-Value資料庫中根本沒有通過值查詢的途徑。

2. 需要儲存資料之間的關係。在Key-Value資料庫中不能通過兩個或以上的鍵來關聯資料。

3. 事務的支援。在Key-Value資料庫中故障產生時不可以進行回滾。

二、 面向文件(Document-Oriented)資料庫

面向文件資料庫會將資料以文件的形式儲存。每個文件都是自包含的資料單元,是一系列資料項的集合。每個資料項都有一個名稱與對應的值,值既可以是簡單的資料型別,如字串、數字和日期等;也可以是複雜的型別,如有序列表和關聯物件。資料儲存的最小單位是文件,同一個表中儲存的文件屬性可以是不同的,資料可以使用XML、JSON或者JSONB等多種形式儲存。

產品:MongoDB、CouchDB、RavenDB

有誰在使用:SAP (MongoDB)、Codecademy (MongoDB)、Foursquare (MongoDB)、NBC News (RavenDB)

適用的場景

1. 日誌。企業環境下,每個應用程式都有不同的日誌資訊。Document-Oriented資料庫並沒有固定的模式,所以我們可以使用它儲存不同的資訊。

2. 分析。鑑於它的弱模式結構,不改變模式下就可以儲存不同的度量方法及新增新的度量。

不適用場景

在不同的文件上新增事務。Document-Oriented資料庫並不支援文件間的事務,如果對這方面有需求則不應該選用這個解決方案。

三、 列儲存(Wide Column Store/Column-Family)資料庫

列儲存資料庫將資料儲存在列族(column family)中,一個列族儲存經常被一起查詢的相關資料。舉個例子,如果我們有一個Person類,我們通常會一起查詢他們的姓名和年齡而不是薪資。這種情況下,姓名和年齡就會被放入一個列族中,而薪資則在另一個列族中。

產品:Cassandra、HBase

有誰在使用:Ebay (Cassandra)、Instagram (Cassandra)、NASA (Cassandra)、Twitter (Cassandra and HBase)、Facebook (HBase)、Yahoo!(HBase)

適用的場景

1. 日誌。因為我們可以將資料儲存在不同的列中,每個應用程式可以將資訊寫入自己的列族中。

2. 部落格平臺。我們儲存每個資訊到不同的列族中。舉個例子,標籤可以儲存在一個,類別可以在一個,而文章則在另一個。

不適用場景

1. 如果我們需要ACID事務。Vassandra就不支援事務。

2. 原型設計。如果我們分析Cassandra的資料結構,我們就會發現結構是基於我們期望的資料查詢方式而定。在模型設計之初,我們根本不可能去預測它的查詢方式,而一旦查詢方式改變,我們就必須重新設計列族。

四、 圖(Graph-Oriented)資料庫

圖資料庫允許我們將資料以圖的方式儲存。實體會被作為頂點,而實體之間的關係則會被作為邊。比如我們有三個實體,Steve Jobs、Apple和Next,則會有兩個“Founded by”的邊將Apple和Next連線到Steve Jobs。

產品:Neo4J、Infinite Graph、OrientDB

有誰在使用:Adobe (Neo4J)、Cisco (Neo4J)、T-Mobile (Neo4J)

適用的場景

1. 在一些關係性強的資料中

2. 推薦引擎。如果我們將資料以圖的形式表現,那麼將會非常有益於推薦的制定

不適用場景

不適合的資料模型。圖資料庫的適用範圍很小,因為很少有操作涉及到整個圖。

相關推薦

NoSQL資料庫型別

在過去幾年,關係型資料庫一直是資料持久化的唯一選擇,資料工作者考慮的也只是在這些傳統資料庫中做篩選,比如SQL Server、Oracle或者是MySQL。甚至是做一些預設的選擇,比如使用.NET的一般會選擇SQL Server;使用Java的可能會偏向Oracle,Ruby是MySQL,Python則是Po

MySql資料庫引擎

前言 資料庫儲存引擎是資料庫底層軟體組織,資料庫管理系統(DBMS)使用資料引擎進行建立、查詢、更新和刪除資料。不同的儲存引擎提供不同的儲存機制、索引技巧、鎖定水平等功能,使用不同的儲存引擎,還可以 獲得特定的功能。現在許多不同的資料庫管理系統都支援多種不同的資料引擎。

Java物件引用型別:強軟弱虛

            JDK1.2之後,Java對引用的概念進行了擴充,將引用分為強引用(Strong Reference)、軟引用(Soft Reference)、弱引用(Weak Reference)、虛引用(Phantom Reference)。這四種物件引用強度依

8Nosql資料庫系統對比

導讀:Kristóf Kovács 是一位軟體架構師和諮詢顧問,他最近釋出了一片對比各種型別NoSQL資料庫的文章。 雖然SQL資料庫是非常有用的工具,但經歷了15年的一支獨秀之後壟斷即將被打破。這只是時間問題:被迫使用關係資料庫,但最終發現不能適應需求的情況不勝列

8NoSQL 資料庫系統對比

導讀:Kristóf Kovács 是一位軟體架構師和諮詢顧問,他最近釋出了一片對比各種型別NoSQL資料庫的文章。 雖然SQL資料庫是非常有用的工具,但經歷了15年的一支獨秀之後壟斷即將被打破。這只是時間問題:被迫使用關係資料庫,但最終發現不能適應需求的情況不勝列舉。 但

NoSQL資料庫適用場景總結

鍵值資料庫 適用案例 現在講幾個適合使用鍵值資料庫的情況。 1 存觸會話資訊 通常來說,每一次網路會話都是唯一的,所以分配給它們的session id 值也各不相同。如果應用程式原來要把session id 存在磁碟上或關係型資料庫中,那麼將其遷移到鍵值資料庫之後, 會獲益

nosql資料庫簡介

鍵值對儲存 典型應用:內容快取,用於大量資料的高訪問負載 資料模型:鍵值對 劣勢:儲存的資料缺少結構化 列儲存資料庫 相關產品:HBase riak 典型應用:分散式的檔案系統 資料模型:以列簇式儲存,將同一列資料存在一起 優勢:查詢速度快,擴充套件性強,

C語言支援的變數儲存型別

一)auto:auto稱為自動變數(區域性變數)。區域性變數是指在函式內部說明的變數(有時也稱為自動變數)。所有的非全程變數都被認為是區域性變數,所以auto實際上從來不用。區域性變數在函式呼叫時自動產生,但不會自動初始化,隨函式呼叫的結束,這個變數也就自動消失了。下次呼叫

實體類型別概念:VO、DTO、DO、PO

二、領域模型中的實體類 領域模型中的實體類分為四種類型:VO、DTO、DO、PO,各種實體類用於不同業務層次間的互動,並會在層次內實現實體類之間的轉化。 業務分層為:檢視層(VIEW+ACTION),服務層(SERVICE),持久層(DAO) 相應各層間實體的傳遞如下圖: 專案中我們並沒有嚴格遵循這種傳遞關

NoSQL資料庫以及對比

 雖然NoSQL流行語火起來才短短一年的時間,但是不可否認,現在已經開始了第二代運動。儘管早期的堆疊程式碼只能算是一種實驗,然而現在的系統已經更加的成熟、穩定。不過現在也面臨著一個嚴酷的事實:技術越來越成熟——以至於原來很好的NoSQL資料儲存不得不進行重寫,也有少數人

關係型資料庫的基本操作sql命令語句

select COLUMN_NAME AS columnName, DATA_TYPE AS dataType, CHARACTER_OCTET_LENGTH colLength, IS_NULLABLE AS isNull, COLUMN_DEFAULT AS defaultValue, COLUMN_KE

C++中的強轉型別

在C++中一共有四種強轉型別分別為:static_cast,const_cast,reinterpret_cast和dynamic_cast 型別轉換的一般形式為:cast-name<type&

NoSQL資料庫的出現及選擇哪NoSQL資料庫

     在沒有NOSQL資料時,關係型資料庫一直是資料持久化的唯一選擇,比較典型的關係型資料庫有SQL Server、Oracle,MySQL,DB2.做.NET開發的同學一般會選擇SQL Server,做JAVA的可能會偏向Oracle,MySQL,Python則是Po

高效資料庫設計思想——提高查詢效率

【開篇】 設計資料庫表結構時,我們首先要按照資料庫的三大正規化進行建立資料庫。 1. 1NF每列不可拆分 2. 2NF確保每個表只做一件事情 3. 3NF滿足2NF,消除表中的依賴傳遞。 三大正規化的出現是在上世紀70年代,由於記

mongodb、redis、hbase三Nosql資料庫的定位

redis基本只適合做快取 Hbase(列式儲存)比較適合做離線計算(不知道對不對???我是小白),底層依靠hadoop提供的HDFS檔案系統,使用時有一整套zookeeper、pig、hive的

NoSql資料型別和各自的優缺點

關於NoSql資料型別的問題,最近面試才遇到,去 360 二面的時候面試官第一個問題就是nosql使用過嗎,它都有哪些資料型別。 基本上只關注過key-value,其他的看過,沒過腦子,所以今天特意找到四種不同的資料型別的優缺點和使用場景。 -------

深入理解資料庫索引型別(- 唯一索引/非唯一索引

唯一索引/非唯一索引主鍵索引(主索引)聚集索引/非聚集索引組合索引唯一索引/非唯一索引唯一索引1.唯一索引是在表上一個或者多個欄位組合建立的索引,這個或者這些欄位的值組合起來在表中不可以重複。非唯一索引2.非唯一索引是在表上一個或者多個欄位組合建立的索引,這個或者這些欄位的值組合起來在表中可以重複,不要求唯一

MYSQL資料庫索引型別的簡單使用

MYSQL資料庫索引型別包括普通索引,唯一索引,主鍵索引與組合索引,這裡對這些索引的做一些簡單描述: (1)普通索引 這是最基本的MySQL資料庫索引,它沒有任何限制。它有以下幾種建立方式: 建立索引 CREATE INDEX indexName ON mytabl

RabbitMQ交換機型別介紹

RabbitMQ  原文地址: https://baijiahao.baidu.com/s?id=1577456875919174629&wfr=spider&for=pc 最新版本的RabbitMQ有四種交換機型別,分別是Direct exc

資料庫語言

SQL語言共分為四大類:資料查詢語言DQL,資料操縱語言DML,資料定義語言DDL,資料控制語言DCL。1. 資料查詢語言DQL資料查詢語言DQL基本結構是由SELECT子句,FROM子句,WHERE子句組成的查詢塊:SELECT <欄位名錶>FROM <表或檢視名>WHERE <