MongoDB學習(一)初識NoSql及MongoDB

分類:編程 時間:2016-11-07

1.初識NoSql


1.1關系型數據庫

 

在認識NoSql之前先來簡單的了解下什麽是關系型數據庫。

關系型數據庫以行和列的二維表格形式來存儲數據,這一系列的行和列被稱為表,一組表組成了數據庫。表與表之間存在著關系,這種關系采用現實世界中實體與實體之間的關系模型。關系型數據庫並不是唯一的高級數據庫模型,也完全不是性能最優的模型,但是關系型數據庫確實是現今使用最廣泛、最容易理解和使用的數據庫模型。現在流行的大型關系型數據庫有Oracle、DB2、PostgreSQL、Microsoft SQL Server、Microsoft Access、mysql等等。

1.2非關系型數據庫
 

1.2.1概念

NoSql,Not only Sql,意為“不僅僅是sql”,泛指非關系型的數據庫。關系型數據庫中,表都是存儲格式化結構的數據

ADVERTISEMENT
,每個元組(可以理解為二維表中的一行,在數據庫中經常被稱為記錄)字段的組成都是一樣的,即使不是每個元組都需要所有的字段,但數據庫會為每個元組都分配所有的字段,這樣的結構可以便於表與表之間進行連接等操作,但從另一個角度來說它也是關系數據庫性能瓶頸的一個因素。

而非關系數據庫以鍵值對存儲,它的結構不固定,每一個元組可以有不一樣的字段,每個元組可以根據需要增加或減少一些自己的鍵值對,這樣就不會局限於固定的結構,可以減少一些時間和空間的開銷。

1.2.2發展
 

NoSQL一詞首先是CarloStrozzi在1998年提出來的,指的是他開發的一個沒有SQL功能,輕量級的,開源的關系型數據庫。這個定義跟我們現在對NoSQL的定義有很大的區別,它確確實實字如其名,指的就是“沒有SQL”的數據庫。但是NoSQL的發展慢慢偏離了初衷,我們要的不是“no sql”,而是“no relational”。

ADVERTISEMENT

2009年初,JohanOskarsson舉辦了一場關於開源分布式數據庫的討論,Eric Evans在這次討論中再次提出了NoSQL一詞,用於指代那些非關系型的,分布式的,且一般不保證遵循ACID原則的數據存儲系統。Eric Evans使用NoSQL這個詞,並不是因為字面上的“沒有SQL”的意思,他只是覺得很多經典的關系型數據庫名字都叫“**SQL”,所以為了表示跟這些關系型數據庫在定位上的截然不同,就是用了“NoSQL“一詞。

隨著互聯網web2.0網站的興起,傳統的關系數據庫在應付web2.0網站,特別是超大規模和高並發的SNS(社交網絡服務)類型的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,而非關系型的數據庫則由於其本身的特點得到了非常迅速的發展。NoSQL數據庫的產生就是為了解決大規模數據集合多重數據種類帶來的挑戰,尤其是大數據應用難題。就目前來講,NoSql對大型企業來說還不是主流,但再過一兩年後,NoSql很有可能成為主流。
ADVERTISEMENT

1.2.3分類


NoSql又分為四大類數據庫:鍵值(Key-Value)存儲數據庫、列存儲數據庫、文檔型數據庫、圖形(Graph)數據庫。它們的對比分析如下:

分類

Examples舉例

典型應用場景

數據模型

優點

缺點

鍵值(key-value)

Tokyo Cabinet/Tyrant,

Redis,

Voldemort,

Oracle BDB

內容緩存,主要用於處理大量數據的高訪問負載,也用於一些日誌系統等等。

Key 指向 Value 的鍵值對,通常用hash table來實現

查找速度快

ADVERTISEMENT

數據無結構化,通常只被當作字符串或者二進制數據

列存儲數據庫

Cassandra, HBase, Riak

分布式的文件系統

以列簇式存儲,將同一列數據存在一起

查找速度快,可擴展性強,更容易進行分布式擴展

功能相對局限

文檔型數據庫

CouchDB,

MongoDB

Web應用(與Key-Value類似,Value是結構化的,不同的是數據庫能夠了解Value的內容)

Key-Value對應的鍵值對,Value為結構化數據

數據結構要求不嚴格,表結構可變,不需要像關系型數據庫一樣需要預先定義表結構

查詢性能不高,而且缺乏統一的查詢語法。

圖形(Graph)數據庫

Neo4J,

InfoGrid,

Infinite Graph

社交網絡,推薦系統等。專註於構建關系圖譜

圖結構

利用圖結構相關算法。比如最短路徑尋址,N度關系查找等

很多時候需要對整個圖做計算才能得出需要的信息,而且這種結構不太好做分布式的集群方案。



1.2.4應用場景
 

1. 數據模型比較簡單

2. 需要靈活性更強的IT系統

3. 對數據庫性能要求較高

4. 不需要高度的數據一致性

5. 對於給定key,比較容易映射復雜值的環境

1.3關系與非關系型數據庫的對比
 

關系型數據庫和非關系型數據庫的特性、優點、缺點及應用場景對比如下:

 

 

特性

優點

缺點

關系型數據庫

1.采用關系模型來組織數據

2.事務的一致性

3. 一個關系型數據庫是由關系模型(即二維表格模型)及其之間的關聯關系組成的一個數據組織

1.容易理解。二維表結構是非常貼近邏輯世界的一個概念,關系模型相對網狀、層次等其他模型來說更易理解

2.使用方便。標準的sql語言使得操作關系數據庫非常方便

3.易於維護。豐富的完整性(實體完整性、參照完整性和用戶定義的完整性)大大降低了數據冗余和數據不一致的概率。

4.支持Sql及事務處理。可以進行復雜查詢,事務支持使得其能保證數據一致性

1.讀寫性能差。為了維護數據一致性所付出的巨大代價就是其讀寫性能比較差

2.高並發讀寫需求

3.海量數據高效率讀寫

4.固定的表結構。不擅長為有數據的表做索引或表結構的變更

非關系型(NoSql)

1.以鍵值對存儲

2.分布式

3.一般不支持ACID特性(即數據庫事務特性:原子性、一致性、隔離性、持久性)

4.NoSql嚴格上講不是一種數據庫,應該是一種數據結構化存儲方法的集合

1.靈活的數據存儲模型。數據結構不固定

2.易擴展。數據之間無耦合,非常容易擴展

3. 高性能。能夠適應現代網絡對數據庫高並發讀寫請求以及對海量數據的高速訪問能力,得益於它的無關系性

4.高可用。在不太影響性能的情況,就可以方便的實現高可用的架構。比如Cassandra,HBase模型,通過復制模型也能實現高可用。

1. 不提供對SQL的支持。Sql是工業標準,不支持sql將對用戶產生一定的學習和遷移成本

2. 應用局限性。大多數NoSql數據庫都不支持事務,現有產品功能不夠完善,附加功能如Bi和報表等也不支持

3.現有產品不成熟。缺乏類似關系型數據庫所具有的強有力的理論、技術、標準規範(如sql)等支持。


2.初識MongoDB


2.1簡介


通過上面的了解可以知道,MongoDB屬於NoSql的一種,且是屬於NoSql中的基於分布式文件存儲的文檔型數據庫。由C++語言編寫,旨在為WEB應用提供可擴展的高性能數據存儲解決方案。

MongoDB是一個介於關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。它支持的數據結構非常松散,是類似json的bson(是一種類json的一種二進制形式的存儲格式,簡稱Binary JSON)格式,因此可以存儲比較復雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似於面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。

2.2特點

它的特點是高性能、易部署、易使用,存儲數據非常方便。主要功能特性有:

* 面向集合存儲,易存儲對象類型的數據。

* 模式自由。

* 支持動態查詢。

* 支持完全索引,包含內部對象。

* 支持查詢。

* 支持復制和故障恢復。

* 使用高效的二進制數據存儲,包括大型對象(如視頻等)。

* 自動處理碎片,以支持雲計算層次的擴展性。

* 支持RUBY,python,Java,C++,PHP,C#等多種語言。

* 文件存儲格式為BSON(一種JSON的擴展)。

* 可通過網絡訪問。

2.3數據模型
 

一個MongoDB 實例可以包含一組數據庫,一個database 可以包含一組Collection(集合),一個集合可以包含一組Document(文檔)。一個Document包含一組field(字段),每一個字段都是一個key/value pair。

key: 必須為字符串類型。

value:可以包含如下類型

1)基本類型,例如,string,int,float,timestamp,binary 等類型。

2)一個document。

3)數組類型


2.4使用原理
 

所謂“面向集合”(Collection-Oriented),意思是數據被分組存儲在數據集中,被稱為一個集合(Collection)。每個集合在數據庫中都有一個唯一的標識名,並且可以包含無限數目的文檔。集合的概念類似關系型數據庫(RDBMS)裏的表(table),不同的是它不需要定義任何模式(schema)。Nytro MegaRAID技術中的閃存高速緩存算法,能夠快速識別數據庫內大數據集中的熱數據,提供一致的性能改進。

模式自由(schema-free),意味著對於存儲在MongoDB數據庫中的文件,我們不需要知道它的任何結構定義。如果需要的話,你完全可以把不同結構的文件存儲在同一個數據庫裏。存儲在集合中的文檔,被存儲為鍵-值對的形式。鍵用於唯一標識一個文檔,為字符串類型,而值則可以是各種復雜的文件類型。我們稱這種存儲形式為BSON(Binary Serialized Document Format)。

2.5應用場景
 

MongoDB 的主要目標是在鍵/值存儲方式(提供了高性能和高度伸縮性)和傳統的RDBMS 系統(具有豐富的功能)之間架起一座橋梁,它集兩者的優勢於一身,適用於以下場景

1)網站數據:Mongo 非常適合實時的插入,更新與查詢,並具備網站實時數據存儲所需的復制及高度伸縮性。

2)緩存:由於性能很高,Mongo也適合作為信息基礎設施的緩存層。在系統重啟之後,由Mongo 搭建的持久化緩存層可以避免下層的數據源過載。

3)大尺寸、低價值的數據:使用傳統的關系型數據庫存儲一些數據時可能會比較昂貴,在此之前,很多時候程序員往往會選擇傳統的文件進行存儲。

4)高伸縮性的場景:Mongo非常適合由數十或數百臺服務器組成的數據庫,Mongo 的路線圖中已經包含對MapReduce 引擎的內置支持。

5)用於對象及JSON 數據的存儲:Mongo 的BSON 數據格式非常適合文檔化格式的存儲及查詢。

不適用場景:

1)高度事務性的系統:例如,銀行或會計系統。傳統的關系型數據庫目前還是更適用於需要大量原子性復雜事務的應用程序。

2)傳統的商業智能應用:針對特定問題的BI 數據庫會產生高度優化的查詢方式。對於此類應用,數據倉庫可能是更合適的選擇。

3)需要SQL 的問題。

Tags: 關系數據庫 Microsoft Oracle 記錄 開發

文章來源:



相關文章
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01