- 非關係型數據庫也叫Nosql數據庫,全稱是not noly sql。
- 2009年初,Johan Oskarsson舉辦了一場關於開源分佈式數據庫的討論,Eric Evans在此次討論中提出了NoSQL一詞,用於指代那些非關係型的,分佈式的,且通常不保證遵循ACID原則的數據存儲系統。Eric Evans使用NoSQL這個詞,並非由於字面上的「沒有SQL」的意思,他只是以爲不少經典的關係型數據庫名字都叫「**SQL」,因此爲了表示跟這些關係型數據庫在定位上的大相徑庭,就是用了「NoSQL「一詞。
- 非關係型數據庫提出另外一種理念,例如,以鍵值對存儲,且結構不固定,每個元組能夠有不同的字段,每一個元組能夠根據須要增長一些本身的鍵值對,這樣就不會侷限於固定的結構,能夠減小一些時間和空間的開銷。使用這種方式,用戶能夠根據須要去添加本身須要的字段,這樣,爲了獲取用戶的不一樣信息,不須要像關係型數據庫中,要對多表進行關聯查詢。僅須要根據id取出相應的value就能夠完成查詢。
💇♂️關係型數據庫與非關係型數據庫的區別:前端
- 關係型數據庫經過外鍵關聯來創建表與表之間的關係,非關係型數據庫一般指數據以對象的形式存儲在數據庫中,而對象之間的關係經過每一個對象自身的屬性來決定。
💇♂️nosql數據庫的特色:mysql
- 模式自由
- 不須要定義表結構,數據表中的每條記錄均可能有不一樣的屬性和格式。
- 逆規範化
- 彈性可擴展
- 多副本異步複製
- 數據快速寫入一個節點,其他節點經過讀取寫入的日誌來實現異步複製。
- 弱事務
- 不能徹底知足事務的ACID特性,可是能夠保證事務的最終一致性。
💇♂️何時用nosql數據庫:linux
- 數據庫表schema常常變化
- 數據庫表字段是複雜數據類型
- 高併發數據庫請求
- 海量數據的分佈式存儲
Mongodbios
➡️Mongodb簡介git
- MongoDB.inc 公司研發的一款nosql類型的文檔型數據庫。
- 功能強大、使用靈活、性能卓越且易於擴展的數據庫。
- 2009年發佈第一個穩定版本,是當前很是熱門的開源的nosql類型數據庫。
- 官方網站:https://www.mongodb.org
- 開源項目:http://github.com/mongodb
➡️Mongodb特色github
- 面向集合存儲,易存儲對象類型的數據
- 模式自由
- 支持動態查詢
- 支持徹底索引,包含內部對象
- 支持查詢
- 支持複製和故障恢復
- 使用高效的二進制數據存儲,包括大型對象(如視頻等)
- 自動處理碎片,以支持雲計算層次的擴展性
- 支持RUBY,PYTHON,JAVA,C++,PHP等多種語言
- 文件存儲格式爲BSON(一種JSON的擴展)
- 可經過網絡訪問
➡️Mongodb安裝redis
- 一、下載mongodb安裝包,
- 二、在/usr/local目錄下建立一個mongodb文件夾,而後把mongodb的安裝包解壓到mongodb文件中
- 三、建立一個存放數據的文件夾data和日誌文件logs
- cd /usr/local/mongodb
- mkdir data
- touch logs
- 四、啓動mongodb
- /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend --port=27017 --fork
➡️Mongodb啓動參數和啓動腳本sql
- 使用Mongodb安裝目錄下的mongod文件來啓動mongodb
- 經常使用的啓動參數:
--dbpath的意思是指定存儲數據的文件夾mongodb
--logpath的意思是指定日誌存儲文件數據庫
--logappend的意思是日誌以增長方式產生
--port指定端口,若是不寫的話,默認是27017
--fork 表明後臺運行
- 也能夠把這些參數都寫到一個配置文件中,而後讀取配置文件
➡️Mongodb啓動腳本
#!/bin/bash
pid=`ps -ef|grep /usr/local/mongodb/bin/mongod|grep -v "grep" | awk '{print $2}'`
if [ $pid ]
then
echo "mongodb is running..."
else
/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend --port=27017 --fork
echo 'mongodb started!'
fi
➡️中止mongodb和中止腳本
- Mongodb中止的時候不能直接kill掉,若是kill掉的話,下次啓動會有問題
- 中止mongodb的時候要用mongod 後面加上shutdown參數,而且指定數據庫文件
- 中止腳本
#!/bin/bash
pid=`ps -ef|grep /usr/local/mongodb/bin/mongod |grep -v "grep" | awk '{print $2}'`
if [[ $pid ]]
then
/usr/local/mongodb/bin/mongod --shutdown --dbpath /usr/local/mongodb/data/
echo 'mongodb stoped'
else
echo "mongodb is not running..."
fi
➡️重啓mongodb和重啓腳本
- 重啓的過程就是先中止,後啓動,咱們已經寫好了啓動的腳本和中止的腳本,依次調用便可
- #!/bin/bash
- /usr/local/mongodb/stop_mongodb.sh
- /usr/local/mongodb/start_mongodb.sh
➡️鏈接mongodb
- Linux下能夠直接使用mongo進入mongod命令行操做
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
➡️Mongodb增刪改查
- 概念: 集合==表 文檔==數據
- 命令關鍵詞:
- Show dbs:查看數據庫
- Show collectios:查看集合
- Create collection:建立一個集合
- use:切換數據庫
- insert:插入數據
- Find:查找數據
- Update:修改數據
- Remove:刪除數據
➡️Mongodb建立和刪除數據庫
- Mongodb中使用use關鍵字來建立一個數據庫
- use chenshifeng;#建立了一個數據庫
- db;#查看當前的數據庫
- db.dropDatabase();
➡️插入數據
- Mongodb中使用insert關鍵字來插入數據 db.collectios.insert(doc);
- 建立一個chenshifeng庫,插入一條班級信息
- use chenshifeng;
- db.classes.insert({"name":"塵世風","nums":100,"course":["mysql","linux","性能測試項目實戰","性能調優","安全測試"],"teacher":"塵世風"});
- 也能夠經過定義變量的方式來插入數據
- new_class=({"name":"塵世風","nums":150,"course":['mysql','nosql','linux','前端性能測試'],"teacher":"塵"});
- db.classes.insert(new_class);
➡️更新數據
- Mongodb中使用update關鍵字來更新數據,db.collectios.update({條件},{更新的值})
- 把剛纔插入的喬巴班的信息加一個狀態,status,上課中
- use chenshifeng;
- 全部字段加全
- db.classes.update({"name":"塵世風"},{"name":"塵世風","nums":100,"course":["mysql","linux","性能測試項目實戰","性能調優","安全測試"],"teacher":"塵世風","status":"上課中"});
- $set方式只更新指定的字段
- db.classes.update({"name":"塵世風"},{$set:{"createtime":"20150810"}});
- 更新全部匹配的值
- db.classes.update({"teacher":"chenshifeng"},{$set:{"teacher":"niuhy"}},{multi:true});
- 若是更新的值不存在的話,插入一條
- db.classes.update({"teacher":"fengluo"},{$set:{"teacher":"niuhy"}},{upsert:true});
- $inc,在原來的值上增長值,只適用於數字型
- db.classes.update({"name":"塵世風"},{$inc:{"nums":20}});
➡️查詢數據
- Mongodb中使用find關鍵字來查詢數據,db.collectios.find();
- db.collectios.find();查詢全部的數據
- db.collectios.find().pretty();已格式化的方式顯示數據
- db.collectios.find({"xx":"xx「});#指定條件查詢
- db.collectios.find({條件1,條件2})#and操做
- db.collectios.find({$or,[{條件1},{條件2}]})#or操做
- db.collectios.find({條件1},$or[{條件2},{條件3}]);#and和or合用
- db.collectios.find().count();#查詢全部的行數
- db.collectios.find().sort(KEY:1)#排序
➡️Mongodb中的條件表達式
![](http://static.javashuo.com/static/loading.gif)
➡️刪除數據
- Mongodb中使用remove關鍵字來刪除數據,db.collectios.remove();
- db.collectios.remove({});刪除全部的數據
- db.collections.remove({條件1},1)#若是有多條匹配的,只刪除一條
➡️開啓profile
- Mongodb的profile就和mysql的慢查詢相似,用於記錄執行時間超過多少的語句。
- db.getProfilingLevel()#獲取profile級別
- db.setProfilingLevel(1,2000)# 設置profile級別
- profile級別有三種:
- 0:不開啓
- 1:記錄慢命令,默認爲大於100ms
- 2:記錄全部命令
- 查詢profile記錄
- db.system.profile.find();
- ts: 該命令在什麼時候執行
op: 操做類型
query: 本命令的詳細信息
responseLength: 返回結果集的大小
ntoreturn: 本次查詢實際返回的結果集
millis: 該命令執行耗時,以毫秒記
➡️建立索引
- db.collections.ensureIndex({xx:1})#建立單列索引
- db.collections.ensureIndex({xx:1,xx:1})#建立多列索引
- db.collections.ensureIndex({xx:1},{「unique」:true})#建立惟一索引
➡️查看、刪除索引
- db.system.indexes.find();查看索引
- db.collections.getIndexes();#查看當前集合中的索引
- Mongodb中使用dropIdenx來刪除索引
- db.collections.dropIndex({xx:1});刪除指定索引
- db.user.dropIndexes();刪除全部的索引
➡️explain
- 使用explain能夠解析查詢語句
- db.collection.find({xx:xx}).explain();
- Explain說明:
Redis
➡️Redis簡介
- redis是一個開源的、使用C語言編寫的、支持網絡交互的、可基於內存也可持久化的Key-Value數據庫。
- redis的官網地址,很是好記,是redis.io。
- Redis和mongodb的區別是redis數據所有存儲在內存中,使用磁盤僅用於數據的持久化,而mongodb數據是存儲在磁盤上。
➡️Redis安裝
wget http://download.redis.io/releases/redis-2.8.12.tar.gz
yum -y install gcc*
yum -y install make
yum -y install tcl
tar xvf redis-2.8.12.tar.gz
mv redis-2.8.12 redis #更名
mv redis /usr/local #移動
cd /usr/local/redis
make
將redis命令移動到/usr/local/bin目錄下,把redis命令放到/usr/local/bin目錄下後就能夠直接使用redis命令,若是不放到/usr/local/bin也是能夠的,直接到/usr/local/redis/src目錄下使用便可。
cd /usr/local/redis/src
cp -rf redis-benchmark redis-server redis-cli redis-check-dump redis-check-aof /usr/local/bin
➡️Redis啓動
- 啓動redis
- 介紹兩種啓動方式,一種是命令啓動,一種是使用配置文件啓動。
- redis-server & #這種是命令啓動,默認端口6379,&表示後臺運行
- redis-server /usr/local/redis/redis.conf #配置文件啓動的,能夠在配置文件中修改端口
- 因爲redis默認帶的配置文件不是後臺運行的,我們不用它,新建一個redis.conf配置文件,把原來那個默認的刪掉,新的配置文件內容以下:
daemonize yes #表明後臺啓動
pidfile /usr/local/redis/redis.pid #pid文件
logfile /usr/local/redis/redis.log #日誌文件
port 6379#端口
dir /usr/local/redis/redisData #持久化文件存放位置
➡️Redis啓動腳本
- 爲了方便管理,如今寫一個redis的啓動腳本和中止腳本
- 啓動腳本:
#!/bin/bash
pid=`ps -ef|grep redis-server|grep -v "grep"|awk '{print $2}'`
if [[ "$pid" ]]
then
echo "redis is running...."
else
/usr/local/bin/redis-server /usr/local/redis/redis.conf
echo "redis started!「
➡️Redis中止腳本
- 中止腳本:
- #!/bin/bash
- pid=`cat /usr/local/redis/redis.pid`
- new_pid=`ps -ef|grep $pid|grep -v "grep"|awk '{print $2}'`
- if [[ $new_pid ]]
- then
- kill -9 $pid
- echo "redis is stoped!"
- else
- echo "redis is not running..."
- fi
➡️Redis重啓腳本
- 重啓腳本,重啓不過就是先中止,後啓動,咱們已經寫好中止和啓動的腳本,依次調用便可:
- #!/bin/bash
- /usr/local/redis/stop_redis
- /usr/local/redis/start_redis
➡️鏈接redis
- Linux下能夠直接使用redis-cli進入redis命令行操做
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
- 也能夠經過redis-client這個可視化工具來鏈接
![](http://static.javashuo.com/static/loading.gif)
➡️Redis的增刪改查
- 選擇數據庫,使用select關鍵字
- 使用set關鍵字插入數據
- 使用get 關鍵字獲取數據
- 使用del 關鍵字 刪除數據
Memcached
➡️Memcached簡介
- Memcached是一個高性能的分佈式的內存對象緩存系統,目前全世界很多人使用這個緩存項目來構建本身大負載的網站,來分擔數據庫的壓力,經過在內存裏維護一個統一的巨大的hash表,它可以用來存儲各類格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等。簡單的說就是將數據調用到內存中,而後從內存中讀取,從而大大提升讀取速度。
➡️Memcached安裝
yum -y install libevent
tar xvf memcached-1.2.0.tar.gz
cd memcached-1.2.0
./configure --prefix=/usr/local/memcached
make
make install
➡️Memcached啓動參數
- -p 監聽的端口
- -c 最大同時鏈接數,默認是1024
- -m 最大內存使用,單位MB。默認64MB
- -P 設置保存Memcache的pid文件
- -d 後臺運行
- -u 運行Memcache的用戶,僅在以root運行的時候有效
➡️Memcached啓動腳本
- #!/bin/bash
- pid=`ps -ef|grep memcached|grep -v "grep"|awk '{print $2}'`
- if [[ $pid ]]
- then
- echo "memcached is running..."
- else
- /usr/local/bin/memcached -d -m 10 -p 11211 -u root -c 256 -P /tmp/memcached.pid >> /tmp/memcached.log
- echo 'memcached started pidfile path is /tmp/memcached.pid'
- fi
➡️Memcached中止腳本
- #!/bin/bash
- pid=`cat /tmp/memcached.pid`
- new_pid=`ps -ef|grep $pid|grep -v "grep"|awk '{print $2}'`
- if [[ $new_pid ]]
- then
- kill -9 `cat /tmp/memcached.pid`
- echo "memcached stoped..."
- else
- echo "memcached is not runing...."
- fi
➡️Memcached重啓腳本
- 重啓腳本也和前面的同樣,先中止再啓動
- #!/bin/bash
- /usr/local/memcached/stop_mem.sh
- /usr/local/memcahed/start_mem.sh
➡️Memcached鏈接方式
- Memcached沒有可視化工具,只能經過Telnet這種方式來鏈接
- telnet ip 端口
- telnet 211.149.218.16 11211
- telnet上去以後,能夠輸入stats查看memcached信息
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
➡️Memcached的增刪改查
- 增長使用add 關鍵字
- add key 0 存放時間 數據大小
- add name 0 30 5
- 查詢使用get 關鍵字
- 修改使用set或者replace關鍵字,set和replace的區別是set一個不存在的key時,會新增,replace一個不存在key時,會報錯。
- set key 0 存放時間 數據大小
- replace key 0 存放時間 數據大小
- set name1 0 50 6
- replace name 0 70 5
- 刪除使用delete關鍵字