MongoDB中的一些基本概念

MongoDB是一款強大、靈活、易於擴展的通用型數據庫。它能擴展出非常多的功能。比如,二級索引(secondary index),範圍查詢(range query),聚合(aggregation),以及地理空間索引(geospatital index)
易於使用
MongoDB是一個面向文檔(document-oriented)的數據庫,而不是關係型的數據庫,不採用關係模式主要是爲了獲得更好的擴展性。也有其他的好處。
面向文檔數據庫不再有“行”的概念,取而代之的是 “文檔(document)"模型。通過在文檔中嵌入文檔和數組,面向文檔的方法能夠僅用一條記錄來表現複雜的層次關係。
不再有預定義(predefined schema):文檔的鍵(key)和值(value)不再是固定的類型和大小。根據需要添加和刪除字段變得更容易。
開發者能嘗試大量的數據模型,選擇其中一個最好的。
易於擴展
MongoDB的涉及採用橫向擴展。面向文檔的數據模型使它可以很容易地在多臺服務器上進行數據分割。MongoDB能自動處理跨集羣的數據和負載,自動重新分配文檔,以及將用戶請求路由到正確的機器上。這樣開發者能夠集中精力編寫程序,不需要考慮橫向擴展的問題。如果一個集羣需要更大的容量,只需要想集羣添加新的服務器,MongoDB會自動將先用的數據向新服務器傳送。
豐富的功能
MongoDB作爲一款通用型的數據庫,除了能夠創建、讀取、更新和刪除數據之外,還提供一系列不斷擴展的獨特功能:
1.索引
MongoDB支持通用的二級索引,多種查詢,且提供唯一索引、複合索引、地理空間索引,以及全文索引
2.聚合(aggregation)
MongoDB支持“聚合管道”(aggregation pipeline)。用戶能夠通過簡單的片段創建複雜的聚合,並且通過數據庫自動優化
3.特殊的聚合類型
MongoDB支持存在時間的有限聚合。
4.文件存儲
MongoDB支持一種非常易用的協議,用於存儲大文件和文件元數據
MongoDB並不支持一些在關係型數據庫中很普遍的功能,比如連接和複雜的多行事務。
卓越的性能
MongoDB的一個主要目標是提供卓越的性能,很大程度上決定了MongoDB的設計。MongoDB能對文檔進行動態的填充。也能預分配數據文件以利用額外的空間來換取穩定的性能。
MongoDB把儘可能多的內存用作緩存(cache),試圖爲每次查詢自動選擇正確的索引。
數據庫服務器儘可能的將處理和邏輯交給客戶端

Mongo中的基本概念
文檔、集合、數據庫、特殊鍵_id、javascript shell
文檔
文檔是MongoDB的核心概念。文檔是鍵值對的一個有序集合,非常類型於關係數據庫中的行,但是更具有表現力
{“greeting”:“hello,world!”,“foo”:“3”}

文檔中的值是可以有多種不同的數據類型(甚至可以是一個完整的內嵌文檔)。在上面這個例子中,“greeting”的值是一個字符型,但是"foo"的值是一個整數
文檔的鍵是字符型。除了少數例外情況,鍵可以是任意UTF-8字符
鍵不能含有\0(空字符)。這個字符用來表示鍵的結尾
.和$具有特殊意義,只能用在特定的情況下。通常這兩個字符是被保留的,如果使用不當的話,會報錯
MongDB中不但區分類型,還區分大小寫,一下兩個文檔就是不同的:
{“foo”:3}
{“foo”:“3”}
下面的兩個也是不同的
{“foo”:3}
{“Foo”:3}

還有一個重要的事情要注意,就是MongoDB中不能有重複的鍵。
文檔中的鍵/值對是有序的:{“X”:1,“Y”:2}和{“Y”:2,“X”:1}是不同的。通常情況下,字段順序並不重要,無須讓數據庫模式依賴特定的殊勳(MongoDB會對字段進行重新排序).在某些特殊情況下,字段的順序變動很重要。
集合
集合就是一組文檔,如果將MongoDB中的一個文檔比喻成關係數據庫中的一行,那麼集合就相當於一張表
動態模式
集合是動態模式的。意味着一個集合裏面的文檔可以是各種各樣的,
命名
集合使用名稱進行標識。集合名可以滿足一下條件的任意UTF-8字符串

1.集合名不能是空字符串("")
2.集合名稱不能包含\0(空字符),這個字符標識集合名稱的結束
3.集合名稱不能以“system”開頭,這是系統集合保留的前綴,比如systtem.user 這個集合中保存的事數據庫用戶的信息,而system.namespaces集合保存這所有數據庫集合的信息
4.用戶創建的集合不能在集合名中包含保留字符"$".因爲某些系統生成的集合中包含$,很多驅動程序確實支持集合中包含該字符串。除非你要訪問這種系統的創建的集合,否則不應該在集合名中包含$

子集合
組織集合的一種慣例是使用"."分隔不同命名空間的子集合。例如,一個具有博客功能的應用可能包含兩個集合,分別是blog.posts和blog.authors。這是爲了使組織結構更清晰。這裏的blog集合跟他的子集合沒任何的關係
雖然子集合沒有任何特別的屬性,但是他們很有用,因爲很多MongoDB工具都是用了子集合
1.GridFS (一種用於存儲大文件的協議)是用子集合來存儲文件的元數據,這樣就可以與文件內容塊很好的隔離
2.大多數驅動程序提供了一些語法糖,用於訪問指定集合的子集合
在MongoDB中推薦是用子集合來組織數據,因爲非常高校。

數據庫
在MongoDB中,多個文檔組成集合,多個集合組成數據庫。一個MongoDB實例可以承載多個數據庫。每個數據庫介意有0個或者多個集合。每個數據庫都有獨立的權限,即使在磁盤上,不同的數據庫可以存放在不同的文件中。按照經驗,我們將有關一個應用程序的所有數據都存儲在一個數據庫中。如果想要在一個MongoDB服務器上存放多個應用程序或者用戶的數據,就需要使用不同的數據庫。
數據庫通過名稱來標識,這點與集合類似。數據庫名可以滿足一下條件的任意UTF-8字符集

1.不能是空字符串("")
2.不能晗有/、\、.、“、*、<、>、:、|、?、$、(一個空格)、\0(空字符).基本上只能使用ASCII中的字母和數字
3.數據庫名稱區分大小寫字母,即使在不區分大小寫的文件也是如此,簡單起見,數據庫名稱應該全部小寫
4.數據庫名稱最多64字節

數據庫最終會變成文件系統中的文件,而數據庫名稱就是相應的文件名稱,這就是數據庫名稱有這麼多限制的原因

另外,有一些數據庫名稱是保留的,可以直接訪問這些具有特殊意義的數據庫
1. admin
從身份驗證的角度來講,這是root數據庫。如果一個用戶添加到admin數據庫,那麼這個用戶自動獲取所有數據庫的權限。再者,一些特定的服務器端命令也只能從admin數據庫運行,如列出所有數據庫或者關閉服務器
2.local
這個數據庫永遠都不可以複製,且一臺服務器上的所有本地集合都可以存儲在這個數據庫中
3.config
MongoDB用於分片設置的時候,分片信息會保存在config數據庫中

啓動MongoDB
通常MongoDB作爲網絡服務器來運行,客戶端連接到服務器並執行操作,下載MongoDB並解壓,運行mongod命令啓動數據庫服務器
mongod在沒有參數的情況下會使用默認數據目錄 /data/db(c:\data\db)、如果數據目錄不存在或者不可寫,會啓動失敗。因此。在啓動MongoDB服務器之前,應該選創建目錄並賦予相應的權限

啓動時,會輸出版本信息和系統信息,然後等待連接,默認監聽27017端口,如果端口被佔用會啓動失敗。
MongoDB還會啓動一個非常基本的的HTTP服務器,監聽數字高於1000的端口,也就是28017端口,這也就意味着訪問http://localhost:28017 ,能獲取數據庫的管理信息
終止mongod的運行,只需要在服務器的shell中ctrl+C

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章