關係型數據庫中的表都是存儲一些結構化的數據,每條記錄的字段的組成都同樣,即便不是每條記錄都須要全部的字段,但數據庫會爲每條數據分配全部的字段。而非關係型數據庫以鍵值對(key-value)存儲,它的結構不固定,每一條記錄能夠有不同的鍵,每條記錄能夠根據須要增長一些本身的鍵值對,這樣就不會侷限於固定的結構,能夠減小一些時間和空間的開銷。javascript
(一)常見的NoSql(非關係型數據庫)數據庫java
CouchDB
Redis
MongoDB
Neo4j
HBase
BigTable
sql
(二)NoSql數據庫優缺點mongodb
一、優點方面:shell
簡單的擴展
快速的讀寫
低廉的成本
靈活的數據模型數據庫
二、不足方面:
不提供對SQL的支持
支持的特性不夠豐富
現有的產品不夠成熟編程
(一)文檔服務器
文檔是MongoDB的核心、基本數據單元,相似於JS中的JSON對象,由多個key-value構成,可是支持更多的數據類型。多個鍵以及相關的值有序的放置在一塊兒即是文檔。在大多數編程語言中都是使用多個key-value的形式,java中是map,Python中是字典,JavaScript中是對象。nosql
(二)集合編程語言
集合就是一組文檔,若是說文檔相似於關係數據庫中的行,那麼集合就是表。
集合是無模式的(模式的概念參見模式的意義)。一個集合中的文檔能夠是任意類型的,也就是說文檔是能夠任意組合的。
問題:集合存在的意義
一、集合的命名
二、子集合
在MangoDB中最經常使用的組織集合的方式就是子集合,也就是使用:命名空間名.集合名 來定義集合名稱,這樣作的目的只是爲組織結構更好。
三、集合的訪問
訪問集合咱們通常使用db.集合名的方式,可是當集合的名稱剛好是數據庫屬性名時,這種方式就沒法獲得集合,只能使用:db.getCollection('集合名')的方式獲得集合。同時,因爲JS中,x.y等價於x['y'],因此能夠用後邊一種方式訪問數據。
(三)數據庫
MangoDB中最基本的存儲單元是文檔,文檔組成集合,集合組成數據庫。一個MangoDB實例能夠承載多個數據庫,數據庫之間徹底獨立。通常狀況下,一個應用對應一個數據庫,相似於關係數據庫中的外模式。
數據庫的名稱最終會變成系統的文件名稱。
MangoDB系統中和傳統的關係數據庫同樣都會有一些初始化的數據庫保存數據庫系統運行信息。
root庫。一些特定的服務器端命令只能從這個庫運行。
local庫中的集合永遠都不會被複制,用於存儲不許備分佈式保存的、只保存在本地(單服務器)的集合。
當MangoDB用於分片設置時,config庫在內部使用,用於保存分片相關的配置信息。
mongoShell是用於與mongodb交互的工具,相似於navicat、sql/plus等數據庫交互工具。因此mongoShell在啓動前必須先啓動mongodb(使用mongodbHome/bin/mongod啓動mongodb實例)。而mongoshell其實就一個強大的javascript解釋器(使用mongodbHome/bin/mongo啓動mongoshell解釋器)。能夠再MongoShell中聲明函數、調用JS標準庫函數、聲明變量等,進行JS開發。
(一)MongoShell中操做的簡單說明
語法:數據庫.集合.insert(文檔)
說明:insert是將某些數據、文檔插入到mongodb中,通常是以JS對象或者JS中的表示法來描述對象。
語法:數據庫.集合.find()/數據庫.集合.findOne()
說明:find是將文檔從數據庫、集合中查找出來,能夠接受查詢文檔形式的限定條件。
語法:數據庫.集合.update(目標更新文檔的限定條件,新的文檔)
說明:update用於將mongodb中的某個文檔內容更新,接受兩個參數,第一個是文檔限定對象,第二個是新對象
語法:數據庫.集合.remove([文檔限定對象])
說明:remove用於刪除文檔,當remove沒有參數的時候刪除集合中全部的文檔,若是有參數,那麼刪除參數限定的文檔對象。
參考資料:《MongoDB權威指南》