一、什么是MongoDB?
MongoDB是一個高性能,開源,無模式的文檔型數據庫,是當前NoSql數據庫中比較熱門的一種。它在許多場景下可用于替代傳統的關系型數據庫或鍵/值存儲方式,
NoSql,全稱是 Not Only Sql,指的是非關系型的數據庫。下一代數據庫主要解決幾個要點:非關系型的、分布式的、開源的、水平可擴展的。原始的目的是為了大規模web應用,這場運動開始于2009年初,通常特性
? ? ? ? ? ? ? ? ? ? ?應用如:模式自由、支持簡易復制、簡單的API、最終的一致性(非ACID)、大容量數據等。NoSQL被我們用得最多的當數key-value存儲,當然還有其他的文檔型的、列存儲、圖型數據庫、xml數據庫等。
特點:
高性能、易部署、易使用,存儲數據非常方便。主要功能特性有:
面向集合存儲,易存儲對象類型的數據。
模式自由。
支持動態查詢。
支持完全索引,包含內部對象。
支持查詢。
支持復制和故障恢復。
使用高效的二進制數據存儲,包括大型對象(如視頻等)。
自動處理碎片,以支持云計算層次的擴展性
支持Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++語言的驅動程序,社區中也提供了對Erlang及.NET等平臺的驅動程序。
文件存儲格式為BSON(一種JSON的擴展)。
可通過網絡訪問。
功能:
面向集合的存儲:適合存儲對象及JSON形式的數據。
動態查詢:Mongo支持豐富的查詢表達式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌的對象及數組。
完整的索引支持:包括文檔內嵌對象及數組。Mongo的查詢優化器會分析查詢表達式,并生成一個高效的查詢計劃。
查詢監視:Mongo包含一個監視工具用于分析數據庫操作的性能。
復制及自動故障轉移:Mongo數據庫支持服務器之間的數據復制,支持主-從模式及服務器之間的相互復制。復制的主要目標是提供冗余及自動故障轉移。
高效的傳統存儲方式:支持二進制數據及大型對象(如照片或圖片)
自動分片以支持云級別的伸縮性:自動分片功能支持水平的數據庫集群,可動態添加額外的機器。
適用場合:
網站數據:Mongo非常適合實時的插入,更新與查詢,并具備網站實時數據存儲所需的復制及高度伸縮性。
緩存:由于性能很高,Mongo也適合作為信息基礎設施的緩存層。在系統重啟之后,由Mongo搭建的持久化緩存層可以避免下層的數據源 過載。
大尺寸,低價值的數據:使用傳統的關系型數據庫存儲一些數據時可能會比較昂貴,在此之前,很多時候程序員往往會選擇傳統的文件進行存儲。
高伸縮性的場景:Mongo非常適合由數十或數百臺服務器組成的數據庫。Mongo的路線圖中已經包含對MapReduce引擎的內置支持。
用于對象及JSON數據的存儲:Mongo的BSON數據格式非常適合文檔化格式的存儲及查詢
?
一、MongoDB的安裝使用
1、下載MongoDB,新建一個文件夾命名為MongoDB,將其解壓到里面
在MongoDB下創建data,在data下再創建db:D:\MongoDB\data\db
? ? ? ? 因為啟動mongodb服務之前需要必須創建數據庫文件的存放文件夾,否則命令不會自動創建,而且不能啟動成功。
? ? 2、啟動MongDB
? ? ? ?
? ? 4、在瀏覽器輸入http://localhost:27017 (27017是mongodb的端口號)查看,若顯示:
? ? ?
? ? ? ?連接成功
? ? ?5、配置Windwos服務
cmd先跳轉到 D:\\MongoDB\bin目錄下。
輸入:mongod --config "D:\Mongodb\mongo.config" --install --serviceName "MongoDB"
即根據剛創建的mongo.config配置文件安裝服務,名稱為MongoDB。
?
二、在C#項目中使用mongDB
1、下載引入MongoDB為C#提供的dll,引入項目
? ??
?
? ? ? ?2、創建一個實體繼承一個實體,屬性類似于C#中的GUID,類型是OnjectId,用Mongodb存儲數據必須要用到。
? ? ? ? ??
? MongoEntity
? ?
3、項目配置文件中MongoDb連接字符串
?
? ? ? ?4、主程序連接MongoDb數據庫,寫入查詢數據
? ? ? ??
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 string connStr = ConfigurationManager.AppSettings["MongoServerSettings"];//獲取連接字符串 6 7 MongoServer server = MongoServer.Create(connStr);//創建Mongdb服務對應的對象 8 9 MongoDatabase db = server.GetDatabase("MyDB");//獲取數據庫,如果沒有,就會自動創建一個 10 11 var collectionName = typeof(MyModel).Name;//指定集合的名字 12 13 var collection = db.GetCollection<MyModel>(collectionName);//獲取集合,如果集合不存在,那么直接創建一個 14 15 16 //添加實體 17 for (int i = 0; i < 100; i++) 18 { 19 MyModel model = new MyModel(); 20 model.Id = i ; 21 model.Name = "jenkin" + i; 22 model.SubTime = DateTime.Now; 23 collection.Insert(model);//將數據源插入到集合中 24 25 } 26 27 Console.WriteLine(collection.Count());//打印有多少條數據 28 29 30 //刪除name為jenkin或者name為123的 31 collection.Remove(Query.Or(Query.EQ("Name","jenkin"),Query.EQ("Name","123"))); 32 33 34 35 //查詢 36 //1、根據id查詢一條 37 var queryDaat = collection.FindOneById(1); 38 39 //根據條件查找 40 var queryData2 = collection.Find(Query.EQ("Name","jenkin")); 41 foreach (var model in queryData2) 42 { 43 Console.WriteLine(model.Name); 44 } 45 46 } 47 }
?
?
??? ? ? ? ? ?