MongoDB 簡介

来源:http://www.cnblogs.com/zhangyunfei-blog/archive/2017/11/08/7793661.html
-Advertisement-
Play Games

簡介 MongoDB[1] 是一個基於分散式文件存儲的資料庫。由C++語言編寫。旨在為WEB應用提供可擴展的高性能數據存儲解決方案。 mongoDB mongoDB MongoDB[2] 是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。他支持的數據結構非 ...


簡介

MongoDB[1]  是一個基於分散式文件存儲的資料庫。由C++語言編寫。旨在為WEB應用提供可擴展的高性能數據存儲解決方案。 mongoDBmongoDB MongoDB[2]  是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。他支持的數據結構非常鬆散,是類似jsonbson格式,因此可以存儲比較複雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似於面向對象的查詢語言,幾乎可以實現類似關係資料庫單表查詢的絕大部分功能,而且還支持對數據建立索引[3] 

mongodb特點

它的特點是高性能、易部署、易使用,存儲數據非常方便。主要功能特性有: *面向集合存儲,易存儲對象類型的數據。 mongodb集群參考mongodb集群參考 *模式自由。 *支持動態查詢。 *支持完全索引,包含內部對象。 *支持查詢。 *支持複製和故障恢復。 *使用高效的二進位數據存儲,包括大型對象(如視頻等)。 *自動處理碎片,以支持雲計算層次的擴展性。 *支持RUBYPYTHONJAVAC++PHPC#等多種語言。 *文件存儲格式為BSON(一種JSON的擴展)。 *可通過網路訪問。

mongodb使用原理

所謂“面向集合”(Collection-Oriented),意思是數據被分組存儲在數據集中,被稱為一個集合(Collection)。每個集合在資料庫中都有一個唯一的標識名,並且可以包含無限數目的文檔。集合的概念類似關係型資料庫(RDBMS)里的表(table),不同的是它不需要定義任何模式(schema)。Nytro MegaRAID技術中的快閃記憶體高速緩存演算法,能夠快速識別資料庫內大數據集中的熱數據,提供一致的性能改進。 模式自由(schema-free),意味著對於存儲在mongodb資料庫中的文件,我們不需要知道它的任何結構定義。如果需要的話,你完全可以把不同結構的文件存儲在同一個資料庫里。 存儲在集合中的文檔,被存儲為鍵-值對的形式。鍵用於唯一標識一個文檔,為字元串類型,而值則可以是各種復雜的文件類型。我們稱這種存儲形式為BSON(Binary Serialized Document Format)。[3]  [4]  MongoDB已經在多個站點部署,其主要場景如下: 1)網站實時數據處理。它非常適合實時的插入、更新與查詢,並具備網站實時數據存儲所需的複製及高度伸縮性。 2)緩存。由於性能很高,它適合作為信息基礎設施的緩存層。在系統重啟之後,由它搭建的持久化緩存層可以避免下層的數據源過載。 3)高伸縮性的場景。非常適合由數十或數百台伺服器組成的資料庫,它的路線圖中已經包含對MapReduce引擎的內置支持。 不適用的場景如下:1)要求高度事務性的系統。 2)傳統的商業智能應用。 3)複雜的跨文檔(表)級聯查詢。[4] 

mongodb系統介紹

分散式文件系統(Distributed File System)是指文件系統管理的物理存儲資源不一定直接連接在本地節點上,而是通過電腦網路與節點相連。分散式文件系統的設計基於客戶機/伺服器模式。一個典型的網路可能包括多個供多用戶訪問的伺服器。另外,對等特性允許一些系統扮演客戶機和伺服器的雙重角色。 HBase是一個分散式的、面向列的開源資料庫,該技術來源於 Fay Chang 所撰寫的Google論文“Bigtable:一個結構化數據的分散式存儲系統。 Yonghong Data Mart是基於自有技術研發的一款數據存儲、數據處理的軟體。Yonghong Data Mart的分散式文件存儲系統 (ZDFS)是在Hadoop HDFS基礎上進行的改造和擴展,將伺服器集群內所有節點上存儲的文件統一管理和存儲。

mongodb實際應用

MongoDB服務端可運行在LinuxWindows或mac os x平臺,支持32位和64位應用,預設埠為27017。推薦運行在64位平臺,因為MongoDB在32位模式運行時支持的最大文件尺寸為2GB。[3] 

mongodb版本發佈

2012年05月23日,MongoDB2.1 開發分支發佈了! 該版本採用全新架構,包含諸多增強。[5]  2012年06月06日,MongoDB 2.0.6 發佈,分散式文檔資料庫。[6]  2013年04月23日,MongoDB 2.4.3 發佈,此版本包括了一些性能優化,功能增強以及bug修複。 2013年08月20日,MongoDB 2.4.6 發佈。 2013年11月01日,MongoDB 2.4.8 發佈,是目前最新的穩定版。

mongodb數據開發

mongodb服務端

下載地址 在不同的系統上會有不同的版本。

mongodb驅動

下載地址 用不同的語言開發會有不同的驅動提供。

mongodb設計特征

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 資料庫。

mongodb基本概念

(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 資料庫在內部使用,用於保存分片的信息。

mongodb數據模型

一個MongoDB 實例可以包含一組資料庫,一個DataBase 可以包含一組Collection(集合),一個集合可以包含一組Document(文檔)。一個Document包含一組field(欄位),每一個欄位都是一個key/value pair。 key: 必須為字元串類型。 value:可以包含如下類型。 ● 基本類型,例如,string,int,float,timestamp,binary 等類型。 ● 一個document。 ● 數組類型。

mongodb適用場景

MongoDB 的主要目標是在鍵/值存儲方式(提供了高性能和高度伸縮性)和傳統的RDBMS 系統(具有豐富的功能)之間架起一座橋梁,它集兩者的優勢於一身。根據官方網站的描述,Mongo 適用於以下場景。 ● 網站數據:Mongo 非常適合實時的插入,更新與查詢,並具備網站實時數據存儲所需的複製及高度伸縮性。 ● 緩存:由於性能很高,Mongo 也適合作為信息基礎設施的緩存層。在系統重啟之後,由Mongo 搭建的持久化緩存層可以避免下層的數據源過載。 ● 大尺寸、低價值的數據:使用傳統的關係型資料庫存儲一些數據時可能會比較昂貴,在此之前,很多時候程式員往往會選擇傳統的文件進行存儲。 ● 高伸縮性的場景:Mongo 非常適合由數十或數百台伺服器組成的資料庫,Mongo 的路線圖中已經包含對MapReduce 引擎的內置支持。 ● 用於對象及JSON 數據的存儲:Mongo 的BSON 數據格式非常適合文檔化格式的存儲及查詢。 MongoDB 的使用也會有一些限制,例如,它不適合於以下幾個地方。 ● 高度事務性的系統:例如,銀行或會計系統。傳統的關係型資料庫目前還是更適用於需要大量原子性複雜事務的應用程式。 ● 傳統的商業智能應用:針對特定問題的BI 資料庫會產生高度優化的查詢方式。對於此類應用,數據倉庫可能是更合適的選擇。 ● 需要SQL 的問題。

mongodb應用案例

下麵列舉一些公司MongoDB的實際應用:[7] 
  • Craiglist上使用MongoDB的存檔數十億條記錄。
  • FourSquare,基於位置的社交網站,在Amazon EC2的伺服器上使用MongoDB分享數據。
  • Shutterfly,以互聯網為基礎的社會和個人出版服務,使用MongoDB的各種持久性數據存儲的要求。
  • bit.ly, 一個基於Web的網址縮短服務,使用MongoDB的存儲自己的數據。
  • spike.com,一個MTV網路的聯營公司, spike.com使用MongoDB的。
  • Intuit公司,一個為小企業和個人的軟體和服務提供商,為小型企業使用MongoDB的跟蹤用戶的數據。
  • sourceforge.net,資源網站查找,創建和發佈開源軟體免費,使用MongoDB的後端存儲。
  • etsy.com ,一個購買和出售手工製作物品網站,使用MongoDB。
  • 紐約時報,領先的線上新聞門戶網站之一,使用MongoDB。
  • CERN,著名的粒子物理研究所,歐洲核子研究中心大型強子對撞機的數據使用MongoDB。

附錄:

mongodb   教程    http://www.runoob.com/mongodb/mongodb-tutorial.html

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • MongoDB是一個基於分散式文件存儲的資料庫。由C++語言編寫。旨在為WEB應用提供可擴展的高性能數據存儲解決方案。 MongoDB是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。他支持的數據結構非常鬆散,是類似json的bson格式,因此可以存儲比較 ...
  • 安裝docker 檢查curl包是否安裝? which curl 如果curl沒有安裝的話,則先更新apt源,並安裝curl,如下: apt-get updateapt-get install curlapt-get updatewget -qO- https://get.docker.com/ | ...
  • 在linux系統下開發C 程式卻會遇到系統不支持conio.h頭文件,無法使用getch()不回顯函數。下麵就演示如何構建函數實現數值輸入不回顯。 運行結果: 說明:Linux下C編程遇到要輸入密碼的問題,可輸入的時候密碼總不能讓人看見吧,本來想用getch()來解決輸入密碼無回顯的問題的,不料Li ...
  • 起始: 待寫…… ...
  • Centos 7 使用firewalld代替了原來的iptables,使用方法如下: >>>關閉防火牆 systemctl stop firewalld.service #停止firewallsystemctl disable firewalld.service #禁止firewall開機啟動 >> ...
  • 前言 本文主要介紹如何使用Grafana和Prometheus以及node_exporter對Linux伺服器性能進行監控。下麵兩張圖分別是兩台伺服器監控信息: 伺服器A 伺服器B 概述 Prometheus是一個開源的服務監控系統,它通過HTTP協議從遠程的機器收集數據並存儲在本地的時序資料庫上。 ...
  • Makefilen內容1. 顯示規則:顯示規則說明瞭,如何生成一個或多個目標。這是由Makefile指出要生成的文件和文件依賴的文件。2. 隱晦規則:基於Makefile的自動推導功能3. 變數的定義:一般是字元串4. 文件指示:一般是在Makefile中引用另外一個makefile文件;根據某些規 ...
  • 前些天,Windows系統出現了故障,需要重新安裝,由於之前在硬碟上同時安裝了Windows 7和centos 7,在安裝了Windows後Windows系統重寫了MBR導致centos無法引導,因為centos裡面有資料,不願意重裝,於是決定自己動手修複MBR和grub。 1、系統環境 Windo ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...