MongoDB 安裝及C#開發測試

fmms 12年前發布 | 93K 次閱讀 MongoDB NoSQL數據庫

 

MongoDB安裝及C#開發測試

(一)  MongoDB簡介

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

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

  • 面向集合存儲,易存儲對象類型的數據。
  • 模式自由。
  • 支持動態查詢。
  • 支持完全索引,包含內部對象。
  • 支持查詢。
  • 支持復制和故障恢復。
  • 使用高效的二進制數據存儲,包括大型對象(如視頻等)。
  • 自動處理碎片,以支持云計算層次的擴展性
  • 支持RUBY,PYTHON,JAVA,C++,PHP等多種語言。
  • 文件存儲格式為BSON(一種JSON的擴展)
  • 可通過網絡訪問

所謂“面向集合”(Collenction-Orented),意思是數據被分組存儲在數據集中,被稱為一個集合(Collenction)。每個 集合在數據庫中都有一個唯一的標識名,并且可以包含無限數目的文檔。集合的概念類似關系型數據庫(RDBMS)里的表(table),不同的是它不需要定 義任何模式(schema)。
模式自由(schema-free),意味著對于存儲在mongodb數據庫中的文件,我們不需要知道它的任何結構定義。如果需要的話,你完全可以把不同結構的文件存儲在同一個數據庫里。
存儲在集合中的文檔,被存儲為鍵-值對的形式。鍵用于唯一標識一個文檔,為字符串類型,而值則可以是各中復雜的文件類型。我們稱這種存儲形式為BSON(Binary Serialized dOcument Format)。

MongoDB服務端可運行在Linux、Windows或OS X平臺,支持32位和64位應用,默認端口為27017。推薦運行在64位平臺,因為MongoDB

在32位模式運行時支持的最大文件尺寸為2GB。

MongoDB把數據存儲在文件中(默認路徑為:/data/db),為提高效率使用內存映射文件進行管理。


下載地址為:
可選擇window         32位mongodb,
也可以選擇window 64位mongodb,

32-bit mongodb window 下載地址:
http://downloads.mongodb.org/win32/mongodb-win32-i386-2.0.2.zip

64-bit mongodb window 下載地址:
http://downloads.mongodb.org/win32/mongodb-win32-x86_64-2.0.2.zip


其它:Linux 32-bit,Linux 64-bit,etc...

本文主要針對window操作系統上安裝mongodb分布式文檔數據庫系統,

下載后為zip壓縮文件,然后解壓后,在里面有一個bin目錄,里面就是運行的系統文件

注意:32位的mongodb數據庫最多只能為2G的限制,這是由32位操作系統的內存尋址空間能力確定的,
所在要存儲海量數據庫數據必須選擇64位操作系統安裝64位mongodb數據庫
建立啟動的批處理文件:
1.命令行方式啟動服務器端
echo "bat_setupService.bat"
mongod.exe -dbpath D:\Mongo_Service\db\

2 命令行方式啟動客戶端
echo "bat_setupClient.bat"
mongo.exe cclove

3安裝為window服務方式
echo "bat_installService.bat  "
mongod --install --serviceName MongoDB  --logpath D:\MongoDB_Service\MongoDB.Log --dbpath D:\MongoDB_Service\db --directoryperdb
然后啟動window服務MongoDB就開始運行了

(四)MongoDB C#測試代碼
public class TestClass:IDisposable 
    {
        private string connectionstring = "";
        private MongoServer mserver = null;
        public TestClass()
        {
            string host = "";
            host = "192.168.1.221"; //64位mongodb
            //host = "192.168.1.232";   //32位mongodb
            int port = 27017;
            //connectionstring="Servers=IP:27017;ConnectTimeout=30000;ConnectionLifetime=300000;MinimumPoolSize=8;MaximumPoolSize=2000";
            MongoConnectionStringBuilder mcsb = new MongoConnectionStringBuilder();
            mcsb.Server = new MongoServerAddress(host, port);
            mcsb.ConnectTimeout =new TimeSpan(30000);
            mcsb.MaxConnectionLifeTime = new TimeSpan(300000);
            mcsb.MinConnectionPoolSize = 8;
            mcsb.MaxConnectionPoolSize = 2000;
            //connectionstring="mongodb://192.168.3.10";
            //64位mongodb
            //connectionstring = "mongodb://192.168.1.221";   
            //
            //32位mongodb
            //connectionstring = "mongodb://192.168.1.232:27017";  

            //創建一個Mongo服務對象mserver
            this.mserver = MongoServer.Create(mcsb);//this.connectionstring);
        }
        //測試代碼:
        //插入測試函數:
       public int mongodbconn(int couts)// test insert
       {
            try
            {  
                //獲取一個Mongo數據庫對象db
                MongoDatabase db = this.mserver.GetDatabase("test");               
                //從Mongo數據庫對象從獲取Mongo集合(即表)名稱為Test的集合(或叫表)
                MongoCollection<BsonDocument> mc = db.GetCollection<BsonDocument>("test");
                //刪除原有數據
                mc.RemoveAll();
                //記錄開始寫入時間
                DateTime begintime = DateTime.Now;
                writefile("bgn: "+begintime.ToString());
                int i;
                for ( i = 1; i <= couts; i++)
                {
                    BsonDocument bd = new BsonDocument
                    {
                        {"_id",i},
                        {"id",i},
                        { "name", "c#" },
                        { "title", "testing inert data "+i }               
                    };
                    mc.Insert(bd);
                    DateTime midtime = DateTime.Now;
                    if((i%10)==0)
                    {
                        writefile("row: "+i+" value="+bd.ToString());
                        TimeSpan tso = midtime.Subtract(begintime);
                        string stimeo = tso.TotalMilliseconds.ToString();
                        writefile("mid: " + stimeo+" ms");
                    }
                }
                //記錄結束寫入時間及用時多少ms
                DateTime endtime = DateTime.Now;
                writefile("end: "+endtime.ToString());
                TimeSpan ts = endtime.Subtract(begintime);
                string stime=ts.TotalMilliseconds.ToString();
                writefile("use " + stime + " ms to insert "+i+" rows");
                return 1;
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
                return 0;            
            }
         }

        //日志函數:
        public static bool writefile(string str) //logifile
        {
            string startpath = Application.StartupPath;
            string logpath=startpath+"\\mongodb.log";
            StreamWriter sw = new StreamWriter(logpath, true);
            sw.WriteLine(str);
            sw.Close();
            return true;
        }

        //查詢測試函數:
        public bool query(int type,string type1value,string typeothervalue)
        {
            try
            {
                string sql;
                long counts=0;
                MongoDatabase db = mserver.GetDatabase("test");
                MongoCollection<BsonDocument> mc = db.GetCollection<BsonDocument>("test");
                if (type == 1)
                {
                    sql = type1value;
                }
                else
                {
                    sql = typeothervalue;
                }
                DateTime qtime = DateTime.Now;
                var query = new QueryDocument("_id",Convert.ToInt32(sql));

                writefile("begin: " + qtime.ToString());
                foreach (BsonDocument emp in mc.Find(query).SetLimit(100))
                {
                    counts = counts + 1;

                   string rename = emp["name"].AsString;
                   string revalue = emp["title"].AsString;
                   writefile(rename + "  "+revalue+" value="+emp.ToString());
                }
                DateTime etime = DateTime.Now;
                TimeSpan ts = etime.Subtract(qtime);
                string stime = ts.TotalMilliseconds.ToString();
                writefile("use " + stime + " ms to query "+counts+"data rows");
                return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return false;
            }
        }


        #region IDisposable 成員

        public void Dispose()
        {
            if (this.mserver != null)
            {
                this.mserver.Disconnect();
                this.mserver = null;
            }
        }

        #endregion
    }
調用引類的方法
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //連接mongoDb 服務器 事件
        private void btn_ConnMongoDb_Click(object sender, EventArgs e)
        {
            TestClass test = new TestClass();
            test.mongodbconn(50);
            test.query(1, "1", "2");
            test.Dispose();
            MessageBox.Show("連接,插入,查詢操作完畢!", "提示");
        }
    }
需要在C#開發的項目工程中添加兩個.Net的組件dll
MongoDB.Bson
MongoDB.Driver

這個需要安裝MongoDB的C#驅動程序
需到下面的網址去下載:
我下載的是這個版本:CSharpDriver-1.3.1.4349.msi
下載下來安裝后,就可以通過C#工程中的引用/Net組件
引用這兩個組件了
MongoDB.Bson
MongoDB.Driver
------the----end-------
create date:2012-02-22
creater:hsg
 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!