NoSql數據庫MongoDB系列(1)——MongoDB簡介

1、NoSQL簡介

    NoSQL(Not Only SQL ),意即「不只僅是SQL」 ,指的是非關係型的數據庫 。是一項全新的數據庫革命性運動,早期就有人提出,發展至2009年趨勢愈加高漲。NoSQL的擁護者們提倡運用非關係型的數據存儲,相對於鋪天蓋地的關係型數據庫運用,這一律念無疑是一種全新的思惟的注入。 

  關係型數據庫中的表都是存儲一些結構化的數據,每條記錄的字段的組成都同樣,即便不是每條記錄都須要全部的字段,但數據庫會爲每條數據分配全部的字段。而非關係型數據庫以鍵值對(key-value)存儲,它的結構不固定,每一條記錄能夠有不同的鍵,每條記錄能夠根據須要增長一些本身的鍵值對,這樣就不會侷限於固定的結構,能夠減小一些時間和空間的開銷。javascript

(一)常見的NoSql(非關係型數據庫)數據庫java

CouchDB
Redis
MongoDB
Neo4j
HBase
BigTable
這裏寫圖片描述sql

(二)NoSql數據庫優缺點mongodb

一、優點方面:shell

簡單的擴展
快速的讀寫
低廉的成本
靈活的數據模型數據庫

二、不足方面:
不提供對SQL的支持
支持的特性不夠豐富
現有的產品不夠成熟編程

2、MongoDB和關係數據庫的對比

3、MongoDB基本概念

(一)文檔服務器

         文檔是MongoDB的核心、基本數據單元,相似於JS中的JSON對象,由多個key-value構成,可是支持更多的數據類型。多個鍵以及相關的值有序的放置在一塊兒即是文檔。在大多數編程語言中都是使用多個key-value的形式,java中是map,Python中是字典,JavaScript中是對象。nosql

(二)集合編程語言

       集合就是一組文檔,若是說文檔相似於關係數據庫中的行,那麼集合就是表

       集合是無模式的(模式的概念參見模式的意義)。一個集合中的文檔能夠是任意類型的,也就是說文檔是能夠任意組合的。

問題:集合存在的意義

  • 雖然集合中能夠保存任意類型的文檔組合,可是若是不妥善的組織、分類文檔的保存,那麼不利於數據的分類管理。
  • 在一個存放多種不一樣類型的集合裏面查詢特定類型的文檔在速度上不划算,最好是每種類型文檔分別存在不一樣的集合中,加快查詢速度。
  • 把同類數據放在同一個集合,保證數據聚合性。
  • 同時,同類的文檔放在同一集合中能夠提升索引的有效性。

一、集合的命名

  • 和key同樣不能有空字符串
  • 不能以"system."開頭,不能含有"$"
  • 一個集合的徹底限定名:數據庫名.集合(子集合)名稱,例如cms.blog.posts

二、子集合

在MangoDB中最經常使用的組織集合的方式就是子集合,也就是使用:命名空間名.集合名 來定義集合名稱,這樣作的目的只是爲組織結構更好。

三、集合的訪問

訪問集合咱們通常使用db.集合名的方式,可是當集合的名稱剛好是數據庫屬性名時,這種方式就沒法獲得集合,只能使用:db.getCollection('集合名')的方式獲得集合。同時,因爲JS中,x.y等價於x['y'],因此能夠用後邊一種方式訪問數據。

(三)數據庫

MangoDB中最基本的存儲單元是文檔,文檔組成集合,集合組成數據庫。一個MangoDB實例能夠承載多個數據庫,數據庫之間徹底獨立。通常狀況下,一個應用對應一個數據庫,相似於關係數據庫中的外模式。

一、命名

數據庫的名稱最終會變成系統的文件名稱。

  • 不能是空字符串
  • 不得含有空格、點、斜槓與反斜槓以及空字符串。
  • 應該所有小寫
  • 最多64字節2

二、系統默認數據庫

MangoDB系統中和傳統的關係數據庫同樣都會有一些初始化的數據庫保存數據庫系統運行信息。

  • Admin

root庫。一些特定的服務器端命令只能從這個庫運行。

  • Local

local庫中的集合永遠都不會被複制,用於存儲不許備分佈式保存的、只保存在本地(單服務器)的集合。

  • Config

當MangoDB用於分片設置時,config庫在內部使用,用於保存分片相關的配置信息。

4、MongoDB數據類型

5、MongoShell

mongoShell是用於與mongodb交互的工具,相似於navicat、sql/plus等數據庫交互工具。因此mongoShell在啓動前必須先啓動mongodb(使用mongodbHome/bin/mongod啓動mongodb實例)。而mongoshell其實就一個強大的javascript解釋器(使用mongodbHome/bin/mongo啓動mongoshell解釋器)。能夠再MongoShell中聲明函數、調用JS標準庫函數、聲明變量等,進行JS開發。

(一)MongoShell中操做的簡單說明

建立--insert

語法:數據庫.集合.insert(文檔)

說明:insert是將某些數據、文檔插入到mongodb中,通常是以JS對象或者JS中的表示法來描述對象。

讀取--find

語法:數據庫.集合.find()/數據庫.集合.findOne()

說明:find是將文檔從數據庫、集合中查找出來,能夠接受查詢文檔形式的限定條件。

更新--update

語法:數據庫.集合.update(目標更新文檔的限定條件,新的文檔)

說明:update用於將mongodb中的某個文檔內容更新,接受兩個參數,第一個是文檔限定對象,第二個是新對象

刪除--remove

語法:數據庫.集合.remove([文檔限定對象])

說明:remove用於刪除文檔,當remove沒有參數的時候刪除集合中全部的文檔,若是有參數,那麼刪除參數限定的文檔對象。

參考資料:《MongoDB權威指南》

相關文章
相關標籤/搜索