關於MongoDB(一)

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   os   使用   ar   java   

Nosql DB

      這是一個非關係型資料庫。 通常我們的資料庫有三類:  關係型資料庫(RDBMS),線上分析處理資料庫(OLAP),和菲關係型資料庫(NoSql)。

      MongoDB屬於第三種,而且是一種基於文檔的(document oriented)資料庫。

 

優劣勢

       優勢: 查詢效能,在都沒有建立索引的時候,明顯快於MySql。 都建立了索引後,不慢於MySql。

       劣勢: 不支援事物。因此如果對於事物要求很高的情形,不適用這個資料庫。

 

概念&文法     概念

       collection:集合,等於關係型資料庫中的table。

       dcoument:文檔對象,等同於關係型資料庫table中的一行記錄。

       field: 索引值對,等同於關係型資料庫中table的一個column

       database:這個沒啥區別。

       資料在MongoDB中是以BSON的格式儲存的,所謂BSON就是binary json, 也就是二進位的json資料。

 

      文法

          屬性:javascript文法。

          顯示資料庫: show dbs

          使用資料庫: use your_db  (備忘:這樣子就好了,your_db不存在,則“建立”一個出來,不會報錯,事實是:直到儲存docuemnt對象時才建立collection和資料庫)    

          插入記錄: your_db.your_collection.insert(json運算式)   (備忘:可以將關聯的對象通過json運算式儲存在一個document裡面---2中的標註3所示,這個跟關係型資料庫不同)

          更新記錄: your_db.your_collection.update(json運算式) 

          your_db.your_collection.save(json運算式) : 實際上是插入和更新操作的合并,記錄不存在則insert,存在則update。

         

          以上指令示範如所示:

          

 圖1

 

 

          查詢記錄:your_db.your_collection.find({索引值對},{需要顯示/隱藏的欄位的索引值對})/findOne({索引值對},{需要顯示/隱藏的欄位的索引值對})

                注意:a) find返回的是一個cursor對象(遊標對象), 而findOne返回的是一個document(一條記錄)。

                find的結果可以用forEach(printjson)格式化,如(圖中標註1)所示:

                

  圖2

               

            b).findOne,對於有多條記錄,則只返回第一條記錄(最舊的那條).

            c). 第二個參數:{需要顯示/隱藏的欄位的索引值對}, 要麼設為白名單,即允許顯示哪些欄位 ,如{ ‘field1‘:1,  ‘field2‘:1,...},

              要麼設定為黑名單,即指定哪些欄位不顯示,如 {‘field1‘:0 , ‘field2‘:0,....}

             不能混用,例如 {‘field1‘:1, ‘field2‘:0},這個是不受支援的。

             但對於_id欄位例外,這個欄位可以混用。

           d). 由於一個document中可能儲存多級對象,引用子物件可以像js中一樣用點號(.)。

              例如,已知,user對應的document中儲存了name欄位,這個欄位是一個json對象(另外一張表--在關係型資料庫中),如下        

{  "_id":ObjectId("a2349723424adfa14"),    "name":{"first":"John","last":"Smith"}     ....}

           那麼,如果要查詢名為john的人,可以這樣寫js

your_db.user.find({‘name.first‘:‘John‘})

  

            e). 範式(normalization)與反範式(de-normalization)

            通常把所有的資料存放區在一個document裡面,這個叫做de-normalization,即用冗餘換取讀取的效能。這通常使用於讀資料比較多的情形,比如cms系統。

            如果寫資料會比較多,最好normalization一下,即通過第一,第二,第三範式將資料表(collection)重新設計。

            mongodb是支援normalization的,通過_id實現(圖2中標註2),_id採用了一個特殊的演算法,考慮到機器,資料庫,collection,時間等因素,將其綜合編碼到_id中,以保證資料的唯一性。

            在normalization後的資料庫中,通過link(連結),指向其他docuemt。

            例如,book對象可以有author對象的連結,如下:

            {"_id":ObjectId("book_id1123132"),

               "name":"MongoDB 30分鐘精通",

               "author_id": ObjectId("author_id_say_tommy"),

                 ...

             }

             author document對象:

             {

                 "_id": ObjectId("author_id_say_tommy"),

                 "name":"Tommy",

                 ...

              }

 

            這個就是分離了冗餘資料,從而有利於update資料操作。

 

          

            

              

 

關於MongoDB(一)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.