什麼是關係型數據庫?
是創建在關係數據庫模型基礎上的數據庫,藉助於集合代數等概念和方法來處理數據庫中的數據,
同時也是一個被組織成一組擁有正式描述性的表格(二維表),該形式的表格做用的實
質是裝載着數據項的特殊收集體,這些表格中的數據能以許多不一樣的方式被存
取或從新召集而不須要從新組織數據庫表格(即表與表之間的聯繫)。
nosql和關係型數據庫比較?
優勢:
1)成本:nosql數據庫簡單易部署,基本都是開源軟件,
不須要像使用oracle那樣花費大量成本購買使用,相比關係型數據庫價格便宜。
2)查詢速度:nosql數據庫將數據存儲於緩存之中,
關係型數據庫將數據存儲在硬盤中,天然查詢速度遠不及nosql數據庫。
3)存儲數據的格式:nosql的存儲格式是key,value形式、文檔形式、圖片形式等等,
因此能夠存儲基礎類型以及對象或者是集合等各類 格式,而關係數據庫則只支持基礎類型。
4)擴展性:關係型數據庫有相似join這樣的多表查詢機制的限制致使擴展很艱難。
缺點:
1)維護的工具和資料有限,由於nosql是屬於新的技術,不能和關係型數據庫10幾年的技術同日而語。
2)不提供對sql語句的支持,若是不支持sql這樣的工業標準,將產生必定用戶的學習和使用成本。
3)不提供關係型數據庫對事物的處理。正則表達式
MongoDB簡介:sql
MongoDB是一個非關係型數據庫 他是NOSQL數據庫技術相對成熟的一個文檔型數據庫mongodb
MongoDB的數據管理系統是由C++語言編寫的 MongoDB支持豐富的增刪改查功能而且支持shell
關係型所沒有的更多數據類型 雖然支持豐富的增刪改查可是他不支持SQL語句 數據庫
MongoDB有着豐富的編程語言接口 例如:Python、PHP、C++、JavaScript、C#等編程
MongoDB也被譽爲着最像關係型數據庫的NoSQL數組
MongoDB(芒果數據庫)
數據存儲發展階段:
文件管理階段(.txt、.doc、.xls....)
優勢:
數據能夠長期保存 有必定的格式化規範 能夠大量存儲 使用簡單方便
缺點:
數據一致性差 用查找修改不方便 數據冗餘
數據庫管理階段:
優勢:
數據組織結構化 下降了冗餘 提升了增刪改查的效率 便於擴展
方便程序調試作自動化管理
缺點:
數據庫的使用專業性較強 相對比較複雜
基本概念
什麼是數據:
可以輸入到計算機中並被識別處理的信息的集合
數據結構:
相互之間存在着一種或多種關係的數據元素的集合和該集合中數據元素之間的關係組成
數據庫:
按照數據結構,存儲管理數據的廠庫
是在數據管理系統軟件管理和控制下建立在必定介質上的數據集合
數據管理系統:
數據管理軟件 用於維護管理數據庫
數據庫系統:
由數據庫、數據管理系統,開發工具等組成的工具集合
關係型數據庫:
採用關係模型來組織數據結構的數據庫(關係模型:二維表)
Oracle(甲骨文)、DB2(IBM)、SQL_Server(微軟)、MySQL、Sqlite
Sqlite:
惟一不須要安裝第三方包就能夠用的數據庫
用於嵌入式 小形數據庫
優勢:
容易理解 邏輯相似常見表格 使用方便 都使用SQL語句 SQL語句自己很是成熟
數據一致性高 冗餘低 完整度高
技術成熟 可使用外部連接等複雜操做
缺點:
每次操做都須要SQL語句解析,消耗較大
不能很好的知足併發需求,應對海量數據爆發力不從心
關係型數據內存存在大量的加鎖操做,讀寫能力受到限制
數據不夠靈活,有時會有空間數據結構複雜化,形成浪費
非關係型數據庫(NoSQL:Not only SQL)
優勢:
高併發 讀寫能力強
擴展性強,使用靈活
優化數據結構,下降數據一致性
能夠作內存緩存
缺點:
通用性差,沒有SQL操做統一的操做語句
操做靈活 統一混亂
沒有join的複雜操做,版本更新快
NoSQL的使用狀況:
1.數據一致性要求低
2.處理數據的海量併發
3.數據庫大小不能肯定 須要分佈擴展
4.給定的數據結構創建非關係模型更加容易
NoSQL分類:
鍵值數據庫 Redis
列存儲數據庫
文檔數據庫 MongoDB
圖形數據庫
MongoDB數據庫:
非關係型數據庫 文檔型數據庫
1.由C++編寫的數據管理系統
2.支持豐富的增刪改查功能
3.支持豐富的數據類型
4.支持衆多的編程語言接口(Python、PHP、C++、JS、C#)
5.在NoSQL中技術相對比較成熟
MongoDB的安裝:
自動安裝:
sudo apt-get install mongodb
默認安裝路徑:/var/lib/mongodb
配置文件:/etc/mongodb.conf
命令集:/usr/bin 或 /usr/local/bin
手動安裝:
1.下載合適版本:www.mongodb.com
2.選擇合適位置解壓:/usr/local 或 /opt
3.將bin文件夾下的命令集加入到環境變量
PATH = $PATH:/opt/mongodb/bin
export PATH
永久設置:能夠將以上兩句寫入/etc/rc.local
4.重啓系統
whereis 軟件名:
查看一個軟件的路徑
Mongodb命令:
設置數據庫存儲的位置:
mongod --dbpath 目錄
設置數據庫端口:
mongod --port 8080
默認27017
mongodb的交互模式,操做數據庫:
mongo 進入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 含義
database database 數據庫
table collection 表/集合
column filed 字段/域
row document 記錄/文檔
index index 索引
建立庫:
use databaseName
建立一個stu的數據庫
use stu
實際use是選擇使用哪一個數據庫,當選者使用的數據庫不存在時就會自動化建立
只有向數據庫插入數據時纔會真實被建立出來 而use後不會立刻被建立
查看庫:
show dbs
數據庫命名:
1.使用UTF-8字符
2.不能含有 . 、 / 、 \ 、"\0" 字符
3.長度不能超過64字節
4.不能和系統數據庫重名
習慣上使用小寫字母命名
系統數據庫:
admin:存放用戶和權限
local:存放本地化數據(不讓被共享)
config:存儲分片信息
db:
mongo系統全局變量。綁定當前正在使用的數據庫對象
當不使用use選擇任何數據庫時,db表示test 此時插入數據會建立test數據庫
數據庫備份和恢復:
備份:
mongodump -h 主機地址 -d 庫名 -o 文件名
恢復:
mongorestore -h 主機地址: 端口號 -d 庫名 文件路徑
若是庫不存在會自動建立庫
數據庫的監測:
mongostat
insert query update delete :每秒增查改刪的次數
command 每秒運行命令的次數
flushes 每秒和磁盤的交互次數
vsize 使用虛擬內存的大小
mongotop
監測每一個數據讀寫時長
ns 數據集合
total 總時長
read 讀時長
write 寫時長
刪除數據庫
db.dropDatabase()
刪除db所表明的數據庫
建立集合:
db.createCollection(「集合名」)
向集合中插入數據時 若是這個集合不存在會自動建立
db.集合名.insert(...)
查詢集合:
show collections
show tables
集合命名規則:
1.合法的UTF-8字符串
2.不能有「\0」
3.不能以system. 開頭 是系統保留前綴
4.不能和關鍵字重名
刪除集合:
db.集合名.drop()
集合的重命名:
db.集合名.renameCollion("新集合名")
文檔:
MongoDB中的數據組織形式
MongoDB文檔:
以鍵值對的形式組成的相似於字典的數據結合
是對數據的一種描述
鍵:
即文檔的域
命名規則:
1.utf-8字符串
2.不能有「\0」
3.一個文檔中鍵不能重複
文檔中鍵值對是有序的
mongodb嚴格區分大小寫
值:
即文檔存儲的數據 也就是mongodb支持的數據類型
值類型:
整型數 1 2 3 -1 -2
布爾類型 true false
浮點型 3.1415926
Array 數組[1,2,3]
Timestamp 時間戳
Data 時間日期
Object 內部文檔
Null 空值
String 字符串
Symbol 特殊字符串
binary data 二進制字符串
code 代碼
regex 正則表達式
ObjectID ObjectID對象
ObjectID:
若是在插入文檔時沒有指定_id域,則系統會自動添加該域做爲主鍵
值則是在一個ObjectID類型數據
"_id" : ObjectId("5b764646d4ff0ad8f415f977")
24 位 16進制數 --> 保證全部的_id值的惟一性
8位的文檔建立時間 6位機器ID 4位進程id 6位計數器
集合中的文檔:
1.集合中的文檔不必定域的個數相同
2.集合中的文檔不必定有相同的域
關係型數據庫中由表決定字段
MongoDB數據庫中由文檔決定域
集合設計原則:
集合的文檔應該儘量的描述同一類內容,有更多相同的域
同一類數據信息,儘可能不要過多的分散集合存放
集合中文檔的層次不要包含太多
插入文檔:
db.集合名.insert({name:"tom", age: 15})
save插入文檔:
db.集合名.save({name:"tom", age: 15})
插入文檔時的鍵能夠不加引號
_id爲系統自動天機爲主鍵,若是本身寫也能夠,可是不能重複
插入多條文檔:
db.集合名.insert([{name:"tom", age: 15}, {}, {}...])
save插入文檔:
db.集合名.save([{name:"tom", age: 15}], {}...)
注:
若是不使用_id則save用法同insert同樣
若是加入_id項 此時該文檔已經存在是則會覆蓋原有文檔