(翻譯)零 MongoDB入門-MongoDB簡介

來源:互聯網
上載者:User

原文地址:http://www.mongodb.org/display/DOCS/Introduction

 

MongoDB不是在實驗室中設計的,它來源於我們構建大規模、高實用性、健壯性系統的經驗中。我們不是從頭開始的,我們想要指出問題在哪裡並且扭轉局面。所以我考慮MongoDB的方法是,如果你使用MySql,並且想要從關係型資料庫轉到基於文檔的資料庫(MongoDB是基於文檔的資料庫——譯者注),你就獲得了大量優秀的特徵:綁定文檔提升了速度,易管理性,通過無模式資料庫進行敏捷開發,更容易的水平括展性(因為串連不再重要)。關係型資料庫有很多重要的東西:索引、動態查詢和更新,等等。但是我們不需要更改很多。例如,在MongoDB中設計索引的方法應該和在MySql和Oracle中完全一樣,你具有的是決定是否對綁定欄位進行索引的權力。

– Eliot Horowitz,10創CTO和聯合創始人

Why MongoDB?

面向文檔

文檔(對象)能很好地映射程式設計語言資料類型

綁定文檔和數組降低了串連的需求

動態類型(無模式)便於模式演化

無串連和無多文檔事務提高了效能和擴充性

高效能

無串連和綁定使得讀寫更快了

索引包括了綁定文檔和數組的鍵的索引

可選的流寫入(無需確認)

高可用性

備份伺服器可以自動進行故障恢複

易擴充性

自動分區(通過伺服器對資料自動分區)

讀寫被跨片分配

無串連和多文檔事務使得分散式查詢更方便快捷

最終一致的讀可以通過備份伺服器分配

富查詢語言

大規模部署

1. 一個或多個分區,每個分區承載全部資料的一個分區(自動管理)。讀和寫被自動發送到合適的分區,每個分區都由一個備份組支援(備份組只承載該分區的資料)。

一個備份組就是一個或多個伺服器,每個都承載著相同資料的拷貝。在任何時間,其中一個是主要集而其他都是次要集。若主要集失效則其中一個次要集自動變為主要集。所有的寫入和一致讀出都在主要集上,所有的最終一致讀出都分配在次要集中。

2. 多個設定管理員,每個都承載著中繼資料的一個拷貝,用以表明哪些資料在哪個分區上。

3. 一個或多個路由器,每個都為一個或多個用戶端充當一個伺服器。用戶端向路由器發送查詢更新要求,路由器在查詢設定管理員後將它們路由給合適的分區。

4.一個或多個用戶端,每個都是使用者應用(的一部分),並且通過mongo用戶端庫(驅動)自己的語言向路由器發送命令。

圖中,mongod是伺服器程式(資料或配置)。Mongos是路由器程式。

小規模部署

1. 一個備份組(自動故障恢複),或者一個伺服器帶有0個或多個從屬機(不能自動故障恢複)

2. 一個或多個用戶端作為一個整體或單一管理者向備份組發送命令。

Mongol資料模型

<!--[if !supportLists]-->·         一個Mongo系統(參考上面的部署)承載多個資料庫(database)

<!--[if !supportLists]-->·         一個資料庫承載多個集合(collection)

<!--[if !supportLists]-->·         一個集合承載多個文檔document

<!--[if !supportLists]-->·         一個文檔就是多個欄位field

<!--[if !supportLists]-->·         一個欄位就是一個索引值對key/value

<!--[if !supportLists]-->·         一個鍵是一個字串名稱

<!--[if !supportLists]-->·         一個值是一個

<!--[if !supportLists]-->·         基礎資料型別 (Elementary Data Type)(string, integer, float, timestamp, binary, etc)

<!--[if !supportLists]-->·         文檔

<!--[if !supportLists]-->·        值的數組

Mongo查詢語言

想要從資料庫集合(collection)中取回某些資料,你要提供一個查詢到匹配你想要的欄位的文檔中。

例如,{name: {first: 'John', last: 'Doe'}}將匹配集合中所有名字是John Doe的文檔。

類似地,{name.last: 'Doe'}將匹配所有姓是Doe的文檔。

而且,{name.last: /^D/}會匹配姓是以D開始的文檔(正則式匹配)。

查詢也會匹配內部綁定的數組。例如,{keywords: 'storage'}會匹配關鍵字數組中有storage的文檔。

類似地,{keywords: {$in: ['storage', 'DBMS']}} 將匹配關鍵字數組中有storage或者DBMS的文檔。

如果你的集合中有大量文檔,而你想要進行快速查詢,那就為查詢構建一個索引。

例如,ensureIndex({name.last: 1}) 或者ensureIndex({keywords: 1})。

注意,索引會佔據空間並且降低更新效率,所以僅在值得折衷的時候使用吧。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.