MongoDB初探

概述

MongoDB是一個高性能、分佈式、無模式的開源數據庫數據庫支持相似關型數據庫的主從結構,文檔以二進制Json形式存儲,無鎖,無事務,有索引。 由C++語言編寫。旨在爲WEB應用提供可護展的高性能數據存儲解決方案。 html

它的特色是高性能、易部署、易使用,存儲數據很是方便。mysql

1、主要功能特性

面向集合存儲。易存儲對象類型的數據及JSON形式的數據。 git

模式自由程序員

動態查詢。支持豐富的查詢表達式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌的對象及數組。github

徹底索引。 sql

複製和自動故障轉移Mongo數據庫支持服務器之間的數據複製,支持主-從模式及服務器之間的相互複製。複製的主要目標是提供冗餘及自動故障轉移。  使用高效的二進制數據存儲,包括大型對象(如視頻等)。mongodb

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

支持RUBYPYTHONJAVAC#C++PHP等多種語言。數據庫

文件存儲格式爲BSON(一種JSON的擴展)數組

可經過網絡訪 


面向集合Collenction-Orented),意思是數據被分組存儲在數據集中,被稱爲一個集合(Collenction)。每一個集合在數據庫中都有一個惟一的標識名,而且能夠包含無限數目的文檔。集合的概念相似關係型數據庫(RDBMS)裏的表(table),不一樣的是它不須要定義任何模式(schema)。
模式自由schema-free),意味着對於存儲在mongodb數據庫中的文件,咱們不須要知道它的任何結構定義。若是須要的話,你徹底能夠把不一樣結構的文件存儲在同一個數據庫裏。 文檔存儲在集合中,被存儲爲鍵-值對的形式。鍵用於惟一標識一個文檔,爲字符串類型,而值則能夠是各中複雜的文件類型。咱們稱這種存儲形式爲BSON(Binary Serialized dOcument Format)。

2、應用範圍和限制

MongoDB的主要目標是在鍵/值存儲方式(提供了高性能和高度伸縮性)以及傳統的RDBMS系統(豐富的功能)架起一座橋樑,集二者的優點於一身。根據官方網站的描述,Mongo適合用於如下場景:

◆網站數據:Mongo很是適合實時的插入,更新與查詢,並具有網站實時數據存儲所需的複製及高度伸縮性。

◆緩存:因爲性能很高,Mongo也適合做爲信息基礎設施的緩存層。在系統重啓以後,由Mongo搭建的持久化緩存層能夠避免下層的數據源過載。

◆大尺寸,低價值的數據:使用傳統的關係型數據庫存儲一些數據時可能會比較昂貴,在此以前,不少時候程序員每每會選擇傳統的文件進行存儲。

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

◆用於對象及JSON數據的存儲:Mongo的BSON數據格式很是適合文檔化格式的存儲及查詢。

天然,MongoDB的使用也會有一些限制,例如它不適合:

◆高度事務性的系統:例如銀行或會計系統。傳統的關係型數據庫目前仍是更適用於須要大量原子性復瑣事務的應用程序。

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

◆須要SQL的問題

MongoDB支持OS X、Linux及Windows等操做系統,並提供了Python,PHP,Ruby,Java及C++語言的驅動程序,社區中也提供了對Erlang及.NET等平臺的驅動程序。

3、運行環境

MongoDB服務端可運行在Linux、Windows或OS X平臺,支持32位和64位應用,默認端口爲27017。推薦運行在64位平臺,由於MongoDB在32位模式運行時支持的最大文件尺寸爲2GB。

4、參考推薦

遷移案例:

1. Wordnik的MongoDB使用經驗http://www.infoq.com/cn/news/2010/11/wordnik-mongodb 

2. 視覺中國的NoSQL之路:從MySQL到MongoDBhttp://www.programmer.com.cn/4199/

3. Choosing a non-relational database; why we migrated from MySQL to MongoDB

http://blog.boxedice.com/2009/07/25/choosing-a-non-relational-database-why-we-migrated-from-mysql-to-mongodb/ 

4. David Mytton爲何從MySQL遷移到MongoDB數據庫  http://www.iteye.com/topic/748322 

性能評測:

1. MongoDB、HandlerSocket和MySQL性能測試及其結果分析http://blog.nosqlfan.com/html/1329.html 

2. MySQL和MongoDB的性能測試http://www.oschina.net/bbs/thread/10930 

3. mongodb有關的研究http://www.cnblogs.com/lovecindywang/archive/2010/05/16/1736934.html 

MongoDB安裝與啓動

測試環境:Win2008R2 x64 + MongoDB1.8

推薦下載版本1.8x86_64

下載連接:http://downloads.mongodb.org/win32/mongodb-win32-x86_64-1.8.0.zip

安裝:

1. 將下在的壓縮包解壓到磁盤某路徑下(如D:\mongo)。

2. 建立D:\mongo\data目錄(用於存放數據庫文件)

啓動:

方式一(CMD方式):

打開CMD窗口,D:\mongo\mongod.exe -dbpath D:\mongo\data

注意,此CMD窗口不要關閉

方式二(Windows服務方式)

打開CMD窗口,D:\mongo\bin\mongod.exe -dbpath D:\mongo\data -install

之後就不須要每次使用CMD打開服務了

測試

打開CMD窗口,

D:\mongodb\bin>mongo.exe 

D:\A\mongodb\bin>mongo.exe

MongoDB shell version: 1.8.0

connecting to: test

> db.foo.save({foo:'bar',hello:'world'})

> db.foo.find()

{ "_id" : ObjectId("4d843f4574cc3f74d85eee36"), "foo" : "bar", "hello" : "world"

 }

>

說明:

啓動服務時,可使用-port參數指定服務端口,默認是27017

啓動服務時,可使用-logpath參數指定日誌文件,默認控制檯輸出

啓動服務時,可使用-logappend參數指定日誌模式爲追加,默認覆蓋

 

MongoDB數據訪問(C#版)

測試環境:Win2008R2 x64 + MongoDB1.8 + VS2010

首先下個C#的驅動,MongodB提供了各類語言的驅動

C# 驅動下載地址:https://github.com/mongodb/mongo-csharp-driver/downloads 

C# 驅動教程:http://www.mongodb.org/display/DOCS/CSharp+Driver+Tutorial 

下載後,將MongoDB.Bson.dllMongodB.Driver.dll添加到項目引用中

 

 

Mongo鏈接字符串:

mongodb://[username:password@][hostname1[:port1], ...][/[database][?options]] 

該字符串能夠指定用戶登陸認證和主機列表

MongoServer 建立:

  MongoServer Create()   若是隻是鏈接本機,而且本機只啓動了一個服務,直  接調用這個方法,徹底不須要鏈接串
  MongoServer Create(MongoConnectionStringBuilder builder)
  MongoServer Create(MongoUrl url)
  MongoServer Create(string connectionString)
  MongoServer Create(Uri uri)

代碼以下:

C#代碼   收藏代碼
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.   
  6. using MongoDB.Bson;  
  7. using MongoDB.Driver;  
  8.   
  9. namespace MongoDBStart  
  10. {  
  11.     class Program  
  12.     {  
  13.         static void Main(string[] args)  
  14.         {  
  15.             string ConnStr = "mongodb://localhost";//數據庫鏈接字符串  
  16.             MongoServer m = MongoServer.Create(ConnStr);  
  17.             MongoDatabase db = m.GetDatabase("db_test");//得到數據庫db_test,沒有則建立  
  18.             MongoCollection c = db.GetCollection("students");//得到集合students,沒有則建立  
  19.             c.CreateIndex(new string[] { "NO" });//在NO上建立索引  
  20.             //建立學生  
  21.             BsonDocument student = new BsonDocument  
  22.             {  
  23.                 {"NO","1000"},  
  24.                 {"Name","Name1"}  
  25.             };  
  26.             c.Insert(student);//插入到集合中  
  27.             BsonDocument Res = c.FindOneAs<BsonDocument>();//返回第一個文檔  
  28.             Console.WriteLine("學號:{0},姓名:{1}", Res["NO"].AsString, Res["Name"].AsString);  
  29.             m.Disconnect();  
  30.             Console.ReadKey();  
  31.         }  
  32.     }  
  33. }  
相關文章
相關標籤/搜索