MongoDB day01

MongoDB芒果數據庫php

數據存儲階段python

文件管理階段(.txt .doc .xlc)mysql

優勢:數據能夠長期保存;數據有必定格式化規範;能夠大量存儲;使用簡單方便c++

缺點:數據一致性差;用戶查找修改不方便;數據冗餘正則表達式

數據庫管理階段sql

優勢:數據組織結構化,下降了冗餘;提升了增刪改查的效率;便於擴展,方便程序調試作自動化處理mongodb

缺點:數據庫的使用專業性較強,相對比較複雜shell

幾個概念數據庫

數據:可以輸入到計算機中並被識別處理的信息的集合編程

數據結構:研究組成數據集合中數據之間關係的學科

數據庫:按照數據結構,存儲管理數據的倉庫。是在數據管理系統軟件軟件管理和控制下建立在必定介質上的數據集合

數據管理系統:數據管理軟件,用於維護管理數據庫

數據庫系統:用數據庫,數據庫管理系統,開發工具等組成的工具

關係型數據庫(Oracle、DB二、SQLServer、Mysql、sqlite)

採用關係模型來組織數據結構的數據庫(二維表)

優勢:容易理解,邏輯相似常見的表格;使用方便,都是用sql語句,sql語句很是成熟;數據一致性高,冗餘低,完整度號;技術成熟,可使用外部連接等複雜操做

缺點:每次操做都須要SQL語句解析,消耗較大;不能很好的知足併發需求,應對海量數據爆發力不從心;關係型數據庫內存存在大量的加鎖操做,讀寫能力受到限制;數據不夠靈活,有時會致使結構複雜化

非關係型數據庫 (NoSql --》 not  only  sql)

優勢:高併發,讀寫能力強、擴展性強、使用靈活、弱化了數據結構、下降數據一致性

缺點:通用性差,並無sql那樣統一的操做語句;操做靈活,容易混亂;沒有join等複雜操做,版本更新快

Noaql的使用狀況

一、數據的一致性要求低

二、處理數據的海量併發

三、數據庫大小不容易肯定。須要分佈擴展

四、給定的數據結構構創建非關係模型更加容易

Nosql分類:

鍵值數據庫  Redis

列存儲數據庫

文檔數據庫  MongoDB

圖形數據庫

MongoDB數據庫(非關係型數據庫------》 文檔型數據庫)

一、由c++編寫的數據庫管理系統

二、支持豐富的增刪改查功能

三、支持豐富的數據類型

四、支持衆多的編程語言結構(python php c++ js C#)

五、在NoSql中技術相對比較成熟

MongoDB安裝

自動安裝     

sudo apt-get install mongodb

默認安裝路徑:/var/lib/mongodb

配置文件:/etc/mongodb.conf

命令集:/usr/bin  /usr/local/bin

whereis 軟件名:查看一個軟件的位置

手動安裝

一、下載合適版本的mongodb

www.mongodb.com  ---> get Mongodb  --> community  server

2. 選擇合適的位置解壓 (/usr/local   /opt)

解壓後獲得mongodb文件夾

3. 將文件夾下bin文件夾加入到環境變量

(bin中就是命令集)

PATH=$PATH:/opt/mongodb.../bin

export PATH

將以上兩句寫入 /etc/rc.local

4. 重啓系統

mongodb命令

mongo  --dbpath   目錄  設置數據庫的存儲位置   e.g.     mongdb  --dbpath  dbs

mongo --port 8080  設置數據庫的端口,默認是27017

mongo  進入mongo shell,mongodb的交互模式,用於操做mongodb數據庫,

quit()或者ctrl+c  退出mongo shell

mongodb數據組成結構

組織結構:鍵值對----》文檔-----》集合-----》數據庫

--------------------------------------
ID    | name    | age
---------------------------------------
1      | Lily        |   17
---------------------------------------
2      | Lucy      | 18
---------------------------------------

{
  "_id":1,
  "name":"Lily",
  "age":17
},
{
  "_id":2,
  "name":"Lucy",
  "age":18
}

概念對比

mysql  和     mongodb概念比較

mysql       mongdb    含義

database     database    數據庫

table       collection   表/集合

column      field           字段/域

row        document  記錄/文檔

index       index           索引

ues databaseName  建立數據庫  e.g.   use stu 建立一個叫stu的數據庫

* 實際ues是選擇使用哪一個數據庫。當選擇的數據庫不存在是就會自動建立

* 只有向數據庫中插入數據時數據庫纔會被真實建立出來,而use後不會立刻建立

show dbs  查看數據庫

系統數據庫

admin:存放用戶的權限

local:存放本地化數據

config:存放分片信息

數據庫的命名規則

一、使用utf-8字符

二、不能含有空格  .  /   \   '0'字符

三、長度不能超過64字節

四、不能和系統數據庫重名

* 習慣上使用小寫字母,表達數據庫的含義

db:mongo系統全局變量,表明當前正在使用的數據庫

* 當不使用use選擇任何數據庫的時候,db表示test。此時插入數據則建立test數據庫

數據庫的備份和恢復

備份   mongodump -h dbhost -d dbname -o dbdir

e.g.  將127.0.0.1上的stu數據庫備份到bak目錄中

mongodump -h 127.0.0.1 -d syu -o bak

恢復 mongostore -h host:port -d dbname dbpath

e.g.  將stu數據庫恢復到127.0.0.1上的student數據庫中。若是student數據庫不存在則自動建立

mongorestore -h 127.0.0.1:27017  -d student  bak/stu

數據庫的檢測命令

mongostat

insert query updata delete:每秒增刪改查的次數

command  每秒運行命令的次數

flushes  每秒和磁盤交互的次數

vsize  使用虛擬內存大小

mongotop  檢測每一個數據讀寫時長

ns    total  read  write

數據集合 總時長  讀時長  寫時長

db.dropDatabase()  刪除db所表明的數據庫

db.createCollection(collection_name)  建立集合,e.g. 建立一個叫class1的集合,db.createCollection('class1')

* 當向這個數據插入數據的時候哦,若是這個集合不存在則自動建立

db.collection.insert(...)  e.g.若是class2不存在則建立這個集合並插入數   db,class2.insert({"name":"Lucy","age":18})

show tables 查看集合

show collections  查看集合

集合的命名規則:

一、合法的utf-8字符串

二、不能有'\0'

三、不能以system開頭。是系統的保留前綴

四、不能和關鍵字重複

db.collection.drop()  刪除集合  e.g. 刪除class2集合 db.class2.drop()

db.collection.renameCollection("new_name")  集合重命名

e.g.將class重命名爲class0   db.class.renameCollection("class0")

文檔

mongdb中數據的組織形式---》文檔

mongodb文檔:以鍵值對的形式組成的相似於字典的數據結構結合。是對數據的一種描述

鍵:即文檔的域

命名規則
1. utf-8 格式字串
2. 不能有'\0'
3. 一個文檔中的鍵不能重複

* 文檔中鍵值對是有序的,mongodb嚴格區分大小寫

值:即文檔存儲數據,也就是mongodb支持的數據類型

bson ---> json ----> JavaScript

 

值類型        數值

 

整型         整數 1 2 3 -1 -3
布爾類型        true false
浮點型         小數 1.234
Array          數組 [1,2,3]
Timestamp       時間戳
Date          時間日期
Object         內部文檔
Null          空值 null
String        字符串
Symbol        特殊字符串
Binary data      二進制字符串
code          代碼
regex          正則表達式
ObjectId        ObjectId對象

ObjectId

"_id" : ObjectId("5b764646d4ff0ad8f415f977")

_id : 若是在插入文檔時沒有指定_id域,則系統會自動添加該域做爲主鍵。值則是一個ObjectId類型數據

24 位 16進制數  --》 保證全部的_id值的惟一性

8位的 文檔建立時間    6位  機器ID  4位 進程id   6位計數器

集合中的文檔

* 集合中的文檔不必定域的個數相同

 

* 集合中的文檔不必定有相同的域

(關係型數據庫: 表決定字段,mongodb中 文檔決定域

集合設計原則

1. 集合中的文檔應該儘量描述同一類內容。有更多相同的域

2. 同一類數據信息,不要過多分散集合存放

3. 集合中文檔的層次不要包含太多

插入文檔

db.collection.insert()

插入單個文檔

e.g.

db.class0.insert({'name':"Lucy","age":18})

db.class0.insert({name:"Tom",age:17,sex:'m'})

*  查看插入結果 : db.class0.find()

*  文檔中鍵能夠不加引號

*  _id爲系統自動添加主鍵,若是本身寫也能夠,可是不能重複

插入多條文檔

db.collection.insert([{},{},{}])

e.g.

db.class1.insert([{name:'阿寶',age:33,sex:'m'},{name:'阿蓉',age:27,sex:'w'},{name:'阿哲',age:32,sex:'m'}])

save 插入文檔

db.collection.save()

e.g.

db.class0.save({name:'Davil',age:16,sex:'m'})

db.class1.save([{name:'小白',age:30,sex:'w'},{name:'小陳',age:34,sex:'m'}])

* 若是不適用_id則save用法同insert同樣

* 若是加_id項,此時文檔已經存在時則會替換原有文檔

相關文章
相關標籤/搜索