一、NoSQL
NoSQL(NoSQL = Not Only SQL )甘桑,意即"不僅僅是SQL"绘证。
NoSQL,指的是非關(guān)系型的數(shù)據(jù)庫(kù)奠宜。NoSQL有時(shí)也稱(chēng)作Not Only SQL的縮寫(xiě)包颁,是對(duì)不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)管理系統(tǒng)的統(tǒng)稱(chēng)。
CAP定理(CAP theorem)
在計(jì)算機(jī)科學(xué)中, CAP定理(CAP theorem), 又被稱(chēng)作 布魯爾定理(Brewer's theorem), 它指出對(duì)于一個(gè)分布式計(jì)算系統(tǒng)來(lái)說(shuō)压真,不可能同時(shí)滿(mǎn)足以下三點(diǎn):
一致性(Consistency) (所有節(jié)點(diǎn)在同一時(shí)間具有相同的數(shù)據(jù))
可用性(Availability) (保證每個(gè)請(qǐng)求不管成功或者失敗都有響應(yīng))
分隔容忍(Partition tolerance) (系統(tǒng)中任意信息的丟失或失敗不會(huì)影響系統(tǒng)的繼續(xù)運(yùn)作)
NoSQL 數(shù)據(jù)庫(kù)分類(lèi)
列存儲(chǔ)娩嚼、文檔存儲(chǔ)、key-value存儲(chǔ)滴肿、圖存儲(chǔ)岳悟、對(duì)象存儲(chǔ)、xml數(shù)據(jù)庫(kù)泼差。
二贵少、MongoDB
2.1 簡(jiǎn)介
MongoDB 是由C++語(yǔ)言編寫(xiě)的,是一個(gè)基于分布式文件存儲(chǔ)的開(kāi)源數(shù)據(jù)庫(kù)系統(tǒng)堆缘,將數(shù)據(jù)存儲(chǔ)為一個(gè)文檔滔灶,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對(duì)組成,MongoDB 文檔類(lèi)似于 JSON 對(duì)象吼肥。
集合就是 MongoDB 文檔組录平,類(lèi)似于RDBMS中的表格。
2.2 常用命令
進(jìn)入mongo shell控制臺(tái)缀皱,可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作
01. show dbs ==> 顯示所有數(shù)據(jù)的列表
02. db ==> 顯示當(dāng)前數(shù)據(jù)庫(kù)對(duì)象或集合
03. use * ==> 創(chuàng)建或連接到一個(gè)指定的數(shù)據(jù)庫(kù)
04. db.dropDatabase() ==> 刪除當(dāng)前數(shù)據(jù)庫(kù)
05. show tables ==> 顯示集合
06. db.collection.drop() ==> 刪除集合
07. db.collection.insert({}) ==> 向集合插入文檔數(shù)據(jù)斗这,insertOne,insertMany
08. db.collection.update({}, {}) ==> 更新集合中文檔數(shù)據(jù)
09. db.collection.save({}) ==> 插入(指定_id時(shí))或更新集合文檔數(shù)據(jù)
10. db.collection.remove({}, Boolean) ==> 刪除集合中文檔數(shù)據(jù)
11. db.collection.find(query, projection) ==> 查詢(xún)集合中文檔數(shù)據(jù)啤斗,pretty()顯示方式涝影,{<key>:{$ne:<value>}}、{<key>:{$lt:<value>}}争占、{<key>:{$lte:<value>}}燃逻、{<key>:{$gt:<value>}}、{<key>:{$gte:<value>}}臂痕; $or: []伯襟; $type類(lèi)型判斷;
12. db.collection.find({},{}).limit(x).skip(y) ==> 限制和跳過(guò)
13. db.collection.find().sort({}) ==> 排序握童,1為升序排列姆怪,而-1是用于降序排列
14. db.collection.ensureIndex({}, {}) ==> 建立索引
10. db.collection.aggregate([{$group***}]) ==> 聚合,$sum、$avg、$min稽揭、$max俺附、$push、$addToSet 溪掀、$first事镣、$last;$project揪胃、$match璃哟、$limit、$skip喊递、$unwind随闪、$group、$sort骚勘、$geoNear铐伴;
10. db.collection.remove({}, Boolean) ==> 刪除集合中文檔數(shù)據(jù)
10. db.collection.remove({}, Boolean) ==> 刪除集合中文檔數(shù)據(jù)
10. db.collection.remove({}, Boolean) ==> 刪除集合中文檔數(shù)據(jù)
10. db.collection.remove({}, Boolean) ==> 刪除集合中文檔數(shù)據(jù)
db.collection.find(query, projection)
2.3 MongoDB 數(shù)據(jù)類(lèi)型
String 字符串
Integer 整型數(shù)值
Boolean 布爾值
Double 雙精度浮點(diǎn)值
Min/Max keys 將一個(gè)值與 BSON(二進(jìn)制的 JSON)元素的最低值和最高值相對(duì)比
Arrays 用于將數(shù)組或列表或多個(gè)值存儲(chǔ)為一個(gè)鍵
Timestamp 時(shí)間戳
Object 用于內(nèi)嵌文檔
Null 用于創(chuàng)建空值
Symbol 符號(hào)。該數(shù)據(jù)類(lèi)型基本上等同于字符串類(lèi)型俏讹,但不同的是当宴,它一般用于采用特殊符號(hào)類(lèi)型的語(yǔ)言
Date 日期時(shí)間
Object ID 對(duì)象 ID。用于創(chuàng)建文檔的 ID
Binary Data 二進(jìn)制數(shù)據(jù)
Code 代碼類(lèi)型
Regular expression 正則表達(dá)式類(lèi)型
2.4 復(fù)制藐石、分片即供、備份、恢復(fù)于微、監(jiān)控
1. MongoDB復(fù)制是將數(shù)據(jù)同步在多個(gè)服務(wù)器的過(guò)程逗嫡。
2. 在Mongodb里面存在另一種集群,就是分片技術(shù),可以滿(mǎn)足MongoDB數(shù)據(jù)量大量增長(zhǎng)的需求株依。
3. 在Mongodb中我們使用mongodump命令來(lái)備份MongoDB數(shù)據(jù)驱证。
mongodump -h dbhost -d dbname -o dbdirectory
4. mongodb使用 mongorestore 命令來(lái)恢復(fù)備份的數(shù)據(jù)。
mongorestore -h <hostname><:port> -d dbname <path>
5. MongoDB中提供了mongostat 和 mongotop 兩個(gè)命令來(lái)監(jiān)控MongoDB的運(yùn)行情況恋腕。
三抹锄、Nodejs MongoDB
1、安裝
$ npm install mongodb
2荠藤、創(chuàng)建
MongoDB 會(huì)自動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)和集合伙单,所以使用前我們不需要手動(dòng)去創(chuàng)建。
3哈肖、鏈接
MongoClient.connect(DB_CONN_STR, function(err, db) {
console.log("連接成功吻育!");
});
4、插入
db.collection('site').insert([], function(err, result) {});
5淤井、查詢(xún)
db.collection('site').find({}). toArray(function(err, result) {});
6布疼、更新
db.collection('site')..update({},{}, function(err, result) {});
7摊趾、插入
db.collection('site').remove([], function(err, result) {});
三、Nodejs MongoDB Mongoose
mongoose構(gòu)建在mongodb(MongoDB數(shù)據(jù)庫(kù)驅(qū)動(dòng))之上游两,提供了Schema砾层、Model和Document對(duì)象,用起來(lái)更為方便贱案。
3.1 connect
連接數(shù)據(jù)庫(kù)
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/accounts');
var db = mongoose.connection;
db.on('error', function() {});
db.on('open', function() {});
db.on('close', function() {});
3.2 Schema
定義數(shù)據(jù)庫(kù)數(shù)據(jù)結(jié)構(gòu)
var userSchema = new mongoose.Schema({
name:{type: String, unique: true},
password:String
}, {collection: "accounts"} // optional
);
//String肛炮、Number、Boolean | Bool轰坊、Array铸董、Buffer祟印、Date肴沫、ObjectId、Mixed
3.3 Model
創(chuàng)建插入數(shù)據(jù)
new User({name:"**", password:"**"}).save(function(err, doc){});
User.create({name:"**", password:"**"}, function(err, doc){});
3.4 Model API
create()蕴忆、find()颤芬、findOne()、update()套鹅、remove()