MongoDB 初学
生活随笔
收集整理的這篇文章主要介紹了
MongoDB 初学
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
大致看了一點 MongoDB. 回憶一下,這個數(shù)據庫有這樣一些特征:
- Schema-less: 不需要預先定義 schema. 數(shù)據以 document 的方式存儲,document 大致上相當于關系數(shù)據庫中的一行記錄。document 存放在 collection 中間(相當于關系數(shù)據庫的 table)。document 里的每個 field 都可以建索引。
- MongoDB 的特性使得它和面向對象編程語言之間的 gap 比較小。不像關系數(shù)據庫那樣需要 OR Mapping 來減輕編程的困難程度。比如,在C#中將對象序列化,即可調用 MongoDB 保存之。
- Schema-less 的特性并非鼓勵將所有不想干的對象都放到一個大垃圾堆里(同一個collection)。而是為了提供靈活性。在大多數(shù)情況下,存儲模型/結構的設計方法和關系數(shù)據庫沒有太大的不同,只是在少數(shù)地方有所區(qū)別,如多對多關系。
- document 可以內嵌 document. 就像 JSON 對象可以嵌套一樣。
- 一般的設計場景鼓勵通過適當?shù)娜哂嘧侄蝸矶x document 的存儲結構,而非 normalized 的 ER 關系。不支持 join 的語法。
- 多對多關系可以通過內嵌 document 來存儲多個關聯(lián) id 的數(shù)組來實現(xiàn)。系統(tǒng)能對數(shù)組進行高效率的查找。
- 和數(shù)據庫的所有操作接口基本都通過 JavaScript / JSON 的語法來調用。
- 查找記錄通過指定 selector 來實現(xiàn)。查詢返回的結果只是游標(cursor),而非直接返回結果??梢愿郊?order(), count() 等串接調用(估計內部也是通過 MapReduce 實現(xiàn)的)。
- update 命令默認是覆蓋整個記錄的模式,就是說并非僅更新指定的字段,而是將其他老的字段信息也抹掉。如果需要實現(xiàn) sql 類似的按需更新字段的行為需要指定多余的參數(shù)。
- 支持 upsert 操作,含義是:存在則更新,否則插入。
- document 可以有任意的屬性集合。同一個 collections 里面可以存放具有不同 field 的 document. 在運行時刻可以向已有的 document 附加屬性。
- 對事務的支持不如傳統(tǒng)的關系數(shù)據庫。有2個辦法:(1) 利用一些本身支持的原子操作來實現(xiàn)簡單的事務。比如 $inc, $set. (2) 將事務對數(shù)據記錄的影響結果預先計算出來,通過二段式的提交(2-phase commit)來實現(xiàn)。比較麻煩。
- 全文索引:支持簡單的方案。復雜的方案需要通過和 Lucene/Solr 配合來實現(xiàn)。
- MapReduce 基本原理及支持:
- 至少需要提供一個 map function, 一個 reduce function.
- map 用于產生鍵值對;reduce 用于對鍵值對進行聚合操作。
- 鍵值對可以被并行處理(多個CPU,多個機器,。。。),所以 reduce 函數(shù)的特征是返回值也必須符合輸入的鍵值對格式,這樣才便于任務的拆分和調度。
轉載于:https://www.cnblogs.com/RChen/archive/2011/04/07/2007375.html
總結
以上是生活随笔為你收集整理的MongoDB 初学的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 修改、读取txt文档
- 下一篇: Docker部署OpenProject