技術文章 > mongodb(分布式文檔存儲數據庫)

mongodb(分布式文檔存儲數據庫)

2020-02-27 11:34

文檔管理軟件,文檔管理系統,知識管理系統,檔案管理系統的技術資料:
MongoDB[1] 是一個基于分布式文件存儲的數據庫。由C++語言編寫。旨在為WEB應用提供可擴展的高性能數據存儲解決方案。
mongoDB[1]
MongoDB[2] 是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。他支持的數據結構非常松散,是類似json的bson格式,因此可以存儲比較復雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。[3]
2特點
它的特點是高性能、易部署、易使用,存儲數據非常方便。主要功能特性有:
*面向集合存儲,易存儲對象類型的數據。
mongodb集群參考
*模式自由。
*支持動態查詢。
*支持完全索引,包含內部對象。
*支持查詢。
*支持復制和故障恢復。
*使用高效的二進制數據存儲,包括大型對象(如視頻等)。
*自動處理碎片,以支持云計算層次的擴展性。
*支持RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。
*文件存儲格式為BSON(一種JSON的擴展)。
*可通過網絡訪問。
3使用原理
[4] 所謂“面向集合”(Collection-Oriented),意思是數據被分組存儲在數據集中,被稱為一個集合(Collection)。每個集合在數據庫中都有一個唯一的標識名,并且可以包含無限數目的文檔。集合的概念類似關系型數據庫(RDBMS)里的表(table),不同的是它不需要定義任何模式(schema)。Nytro MegaRAID技術中的閃存高速緩存算法,能夠快速識別數據庫內大數據集中的熱數據,提供一致的性能改進。
模式自由(schema-free),意味著對于存儲在mongodb數據庫中的文件,我們不需要知道它的任何結構定義。如果需要的話,你完全可以把不同結構的文件存儲在同一個數據庫里。
存儲在集合中的文檔,被存儲為鍵-值對的形式。鍵用于唯一標識一個文檔,為字符串類型,而值則可以是各種復雜的文件類型。我們稱這種存儲形式為BSON(Binary Serialized Document Format)。[3]
[5] MongoDB已經在多個站點部署,其主要場景如下:
1)網站實時數據處理。它非常適合實時的插入、更新與查詢,并具備網站實時數據存儲所需的復制及高度伸縮性。
2)緩存。由于性能很高,它適合作為信息基礎設施的緩存層。在系統重啟之后,由它搭建的持久化緩存層可以避免下層的數據源過載。
3)高伸縮性的場景。非常適合由數十或數百臺服務器組成的數據庫,它的路線圖中已經包含對MapReduce引擎的內置支持。
不適用的場景如下:1)要求高度事務性的系統。
2)傳統的商業智能應用。
3)復雜的跨文檔(表)級聯查詢。[5]
4系統介紹
分布式文件系統(Distributed File System)是指文件系統管理的物理存儲資源不一定直接連接在本地節點上,而是通過計算機網絡與節點相連。分布式文件系統的設計基于客戶機/服務器模式。一個典型的網絡可能包括多個供多用戶訪問的服務器。另外,對等特性允許一些系統扮演客戶機和服務器的雙重角色。
HBase是一個分布式的、面向列的開源數據庫,該技術來源于 Fay Chang 所撰寫的Google論文“Bigtable:一個結構化數據的分布式存儲系統。
Yonghong Data Mart是基于自有技術研發的一款數據存儲、數據處理的軟件。Yonghong Data Mart的分布式文件存儲系統 (ZDFS)是在Hadoop HDFS基礎上進行的改造和擴展,將服務器集群內所有節點上存儲的文件統一管理和存儲。
5實際應用
MongoDB服務端可運行在Linux、Windows或mac os x平臺,支持32位和64位應用,默認端口為27017。推薦運行在64位平臺,因為MongoDB在32位模式運行時支持的最大文件尺寸為2GB。[3]
6版本發布
2012年05月23日,MongoDB2.1 開發分支發布了! 該版本采用全新架構,包含諸多增強。[6]
2012年06月06日,MongoDB 2.0.6 發布,分布式文檔數據庫。[7]
2013年04月23日,MongoDB 2.4.3 發布,此版本包括了一些性能優化,功能增強以及bug修復。[8]
2013年08月20日,MongoDB 2.4.6 發布。
2013年11月01日,MongoDB 2.4.8 發布,是目前最新的穩定版。
7數據開發
服務端
下載地址[9]
在不同的系統上會有不同的版本。
驅動
下載地址
用不同的語言開發會有不同的驅動提供。
8設計特征
MongoDB 的設計目標是高性能、可擴展、易部署、易使用,存儲數據非常方便。其主要功能特性如下。
(1)面向集合存儲,容易存儲對象類型的數據。在MongoDB 中數據被分組存儲在集合中,集合類似RDBMS 中的表,一個集合中可以存儲無限多的文檔。
(2)模式自由,采用無模式結構存儲。在MongoDB 中集合中存儲的數據是無模式的文檔,采用無模式存儲數據是集合區別于RDBMS 中的表的一個重要特征。
(3)支持完全索引,可以在任意屬性上建立索引,包含內部對象。MongoDB的索引和RDBMS 的索引基本一樣,可以在指定屬性、內部對象上創建索引以提高查詢的速度。除此之外,MongoDB 還提供創建基于地理空間的索引的能力。
(4)支持查詢。MongoDB 支持豐富的查詢操作,MongoDB 幾乎支持SQL中的大部分查詢。
(5)強大的聚合工具。MongoDB 除了提供豐富的查詢功能外,還提供強大的聚合工具,如count、group 等,支持使用MapReduce 完成復雜的聚合任務。
(6)支持復制和數據恢復。MongoDB 支持主從復制機制,可以實現數據備份、故障恢復、讀擴展等功能。而基于副本集的復制機制提供了自動故障恢復的功能,確保了集群數據不會丟失。
(7)使用高效的二進制數據存儲,包括大型對象(如視頻)。使用二進制格式存儲,可以保存任何類型的數據對象。
(8)自動處理分片,以支持云計算層次的擴展。MongoDB 支持集群自動切分數據,對數據進行分片可以使集群存儲更多的數據,實現更大的負載,也能保證存儲的負載均衡。
(9)支持Perl、PHP、Java、C#、JavaScript、Ruby、C 和C++語言的驅動程序,MongoDB 提供了當前所有主流開發語言的數據庫驅動包,開發人員使用任何一種主流開發語言都可以輕松編程,實現訪問MongoDB 數據庫。
(10)文件存儲格式為BSON(JSON 的一種擴展)。BSON 是對二進制格式的JSON 的簡稱,BSON 支持文檔和數組的嵌套。
(11)可以通過網絡訪問。可以通過網絡遠程訪問MongoDB 數據庫。
9基本概念
(1)文檔
文檔是 MongoDB 中數據的基本單位,類似于關系數據庫中的行(但是比行復雜)。多個鍵及其關聯的值有序地放在一起就構成了文檔。不同的編程語言對文檔的表示方法不同,在JavaScript 中文檔表示為:
{“greeting”:“hello,world”}
這個文檔只有一個鍵“greeting”,對應的值為“hello,world”。多數情況下,文檔比這個更復雜,它包含多個鍵/值對。例如:
{“greeting”:“hello,world”,“foo”: 3}
文檔中的鍵/值對是有序的,下面的文檔與上面的文檔是完全不同的兩個文檔。
{“foo”: 3 ,“greeting”:“hello,world”}
文檔中的值不僅可以是雙引號中的字符串,也可以是其他的數據類型,例如,整型、布爾型等,也可以是另外一個文檔,即文檔可以嵌套。文檔中的鍵類型只能是字符串。
(2)集合
集合就是一組文檔,類似于關系數據庫中的表。集合是無模式的,集合中的文檔可以是各式各樣的。例如,{“hello,word”:“Mike”}和{“foo”: 3},它們的鍵不同,值的類型也不同,但是它們可以存放在同一個集合中,也就是不同模式的文檔都可以放在同一個集合中。既然集合中可以存放任何類型的文檔,那么為什么還需要使用多個集合?這是因為所有文檔都放在同一個集合中,無論對于開發者還是管理員,都很難對集合進行管理,而且這種情形下,對集合的查詢等操作效率都不高。所以在實際使用中,往往將文檔分類存放在不同的集合中,例如,對于網站的日志記錄,可以根據日志的級別進行存儲,Info級別日志存放在Info 集合中,Debug 級別日志存放在Debug 集合中,這樣既方便了管理,也提供了查詢性能。但是需要注意的是,這種對文檔進行劃分來分別存儲并不是MongoDB 的強制要求,用戶可以靈活選擇。
可以使用“.”按照命名空間將集合劃分為子集合。例如,對于一個博客系統,可能包括blog.user 和blog.article 兩個子集合,這樣劃分只是讓組織結構更好一些,blog 集合和blog.user、blog.article 沒有任何關系。雖然子集合沒有任何特殊的地方,但是使用子集合組織數據結構清晰,這也是MongoDB 推薦的方法。
(3)數據庫
MongoDB 中多個文檔組成集合,多個集合組成數據庫。一個MongoDB 實例可以承載多個數據庫。它們之間可以看作相互獨立,每個數據庫都有獨立的權限控制。在磁盤上,不同的數據庫存放在不同的文件中。MongoDB 中存在以下系統數據庫。
● Admin 數據庫:一個權限數據庫,如果創建用戶的時候將該用戶添加到admin 數據庫中,那么該用戶就自動繼承了所有數據庫的權限。
● Local 數據庫:這個數據庫永遠不會被負責,可以用來存儲本地單臺服務器的任意集合。
● Config 數據庫:當MongoDB 使用分片模式時,config 數據庫在內部使用,用于保存分片的信息。
10數據模型
一個MongoDB 實例可以包含一組數據庫,一個DataBase 可以包含一組Collection(集合),一個集合可以包含一組Document(文檔)。一個Document包含一組field(字段),每一個字段都是一個key/value pair。
key: 必須為字符串類型。
value:可以包含如下類型。
● 基本類型,例如,string,int,float,timestamp,binary 等類型。
● 一個document。
● 數組類型。
11適用場景
MongoDB 的主要目標是在鍵/值存儲方式(提供了高性能和高度伸縮性)和傳統的RDBMS 系統(具有豐富的功能)之間架起一座橋梁,它集兩者的優勢于一身。根據官方網站的描述,Mongo 適用于以下場景。
● 網站數據:Mongo 非常適合實時的插入,更新與查詢,并具備網站實時數據存儲所需的復制及高度伸縮性。
● 緩存:由于性能很高,Mongo 也適合作為信息基礎設施的緩存層。在系統重啟之后,由Mongo 搭建的持久化緩存層可以避免下層的數據源過載。
● 大尺寸、低價值的數據:使用傳統的關系型數據庫存儲一些數據時可能會比較昂貴,在此之前,很多時候程序員往往會選擇傳統的文件進行存儲。
● 高伸縮性的場景:Mongo 非常適合由數十或數百臺服務器組成的數據庫,Mongo 的路線圖中已經包含對MapReduce 引擎的內置支持。
● 用于對象及JSON 數據的存儲:Mongo 的BSON 數據格式非常適合文檔化格式的存儲及查詢。
MongoDB 的使用也會有一些限制,例如,它不適合于以下幾個地方。
● 高度事務性的系統:例如,銀行或會計系統。傳統的關系型數據庫目前還是更適用于需要大量原子性復雜事務的應用程序。
● 傳統的商業智能應用:針對特定問題的BI 數據庫會產生高度優化的查詢方式。對于此類應用,數據倉庫可能是更合適的選擇。
● 需要SQL 的問題。
体彩7星彩规则 广东快乐十分春节放 广西快乐十分开奖结 股票分析软件破解版 南京毅力期货配资 陕西麻将 湖南哈哈麻将推倒胡 弘益配资 2019121大乐透开奖结果查询 16张麻将单机版下载 鼎泽配资 内蒙古快三开奖记录 上证指数走势图大盘指数 广东麻将推倒胡微信登 正宗陕西闲来麻将下载 3d试机号金码最近 江苏快三号码开奖