簡析三大資料庫
我們為什麼要學習資料庫
了解資料庫,我們首先需要區分一下資料庫和數據倉庫
資料庫是一種邏輯概念,用來存儲數據的倉庫,側重存儲
數據倉庫:從數據量來說,數據倉庫要比資料庫龐大的多,主要用於數據挖掘和數據分析。
在這裡我們可以類比git和github,git是一個版本管理工具,而github是一個在線的倉庫,你的所有代碼都可以提交到這個網上倉庫中,在學資料庫的同時,我們其實已經學習到兩個知識點。
那麼,其實我們發現有很多資料庫需要我們學習,為什麼要學習這麼多資料庫,學習一種不行嗎?
我們學習這些資料庫,就是要將這些資料庫組合起來使用,是為了提高檢索速度,減少用戶等待時間。
因為用戶的很多信息都需要資料庫來進行存儲,而mysql一般是存儲在硬碟上,用物理磁碟讀寫數據,速度相對來說比較慢,如果要提高用戶的訪問體驗,比如最近用戶的登陸信息我就存放在redis或者mongodb中,這樣用戶登錄的話就不用等待太長時間。
用戶登錄賬號以後,就會請求相關的信息,那麼最有可能先去非關係型資料庫mongodb或者redis中去查找,如果沒找到,就會去持久的關係型資料庫當中去查找,沒有查到,那是因為信息沒有錄入,如果查到了相關的數據,我們就把當前查到的數據存儲到redis裡面去,經過客戶端,再返回給用戶,因為這時候我們也要考慮,別的用戶是不是也要訪問相關的數據信息,redis裡面存儲的就是經常使用的數據信息。
舉個例子,大家都在12306上買過票吧,春運期間幾千萬的點擊量,如果都要從關係型資料庫mysql當中獲取用戶信息,伺服器的壓力就會超大,那麼作為IT攻城獅來說,你今天沒買上票,不要灰心,你的登錄信息已經存在我的redis資料庫當中啦,我知道你最近需要買票,下次登錄就會快速進入購票頁面啦,而且為了應對春運期間伺服器的壓力,一些固定頁面的內容都直接放在redis資料庫當中,比如12306網站的首頁。
redis和mongodb的區別
而redis和mongodb之間的區別主要在mongodb能實現海量數據的訪問效率提升,同時內置一些數據分析功能(mapreduce),redis更偏向於較小數據量的性能和運算,按照進程順序寫入,雖然支持集群,也僅限於主-從模式。
這裡的主從模式我們可以這樣理解,我們在實際處理數據的時候,為了降低每個redis伺服器的負載,我們可以設置多個伺服器一起執行任務,做主從模式,也就是一個redis伺服器負責寫數據,其他的伺服器負責讀數據,主伺服器的數據也會自動的同步給其他的從伺服器。
三大資料庫大比拼
mysql:
安裝服務端:
sudo apt-get install mysql-server
安裝客戶端:
sudo apt-get install mysql-client
進入伺服器的命令操作
sudo /etc/init.d/mysql start 密碼:tarena
進入客戶端
mysql –u root –p密碼
退出命令:
quit /q exit
如果命令寫錯用/c清理錯誤,而不至於退出mysql資料庫
在MySQL當中,sql語句的書寫不區分大小寫,但是文件的名字要區分大小寫,這裡的命令都是以;結尾
我們知道mysql是關係型資料庫,那什麼是關係呢,任何事物之間的聯繫都叫做關係,資料庫當中表與表之間的聯繫就是關係,也是一種數據,需要存儲下來。
在資料庫的查詢過程中,我們會用到索引,那麼什麼是索引呢,索引的本質就是數據結構,是幫助MySQL高效獲取數據的數據結構。
在MySQL中,索引屬於存儲引擎級別的概念,不同存儲引擎對索引的實現方式是不同的,這裡我們討論兩個存儲引擎,MyISAM和InnoDB,這兩者的引擎使用的都是B+Tree作為索引結構,B+樹的定義十分複雜,因此只簡要地介紹B+樹:B+樹是為磁碟或其他直接存取輔助設備而設計的一種平衡查找樹,在B+樹中,所有記錄節點都是按鍵值的大小順序存放在同一層的葉節點中,各葉節點指針進行連接。
關於MySQL索引的數據結構和演算法原理可以參照如下鏈接
總結一下mysql資料庫中的一些簡單操作:
創建資料庫:create database test charset=utf8;使用資料庫:use test那這時候可以在裡面進行增刪改查
增:
create table 表名
insert into 表名 (column1, column2, column3,...columnN) values (value1, value2, value3,...valueN);
insert into 表名 values (value1, value2, value3,...valueN);
刪:
drop table 表名 整個刪除
delete table 表名 還會留下表頭,但表中的內容已經被刪除了
改
update table set xx=xx,xxx=xx where xxx=xxx and xxx=xxx;
這裡的修改可以在後面限定一些條件,我們也可以根據update的中文翻譯來確定它的作用,修改,更新的意思。
查
show tables 查看有多少表
select * from 表名
select column1,column2,...columnN from 表名 where 條件1 and 條件2...and 條件N;
其實資料庫的使用最常用最重要的也是查詢,當然查詢的話需要各種各樣的條件限定,這就需要大家針對查詢這一塊做一個文檔總結,這完全有必要,因為這一塊的信息量太大了,在此不再贅述。
MongoDB:
文檔型資料庫,數據結構由鍵值對組成,適用於事件的記錄,內容管理或博客平台,通過第三方平台訪問和抓取數據
它的性能比較好,是因為它是C++語言編寫,運行穩定,可以將不同數據結構的文檔存儲在同一個資料庫里,尤其適合存儲json文件的格式,所以一般爬蟲的時候會用到。
json的數據格式在python當中叫做字典,在JavaScript中叫做Json
mongodb支持分散式,建一個集群,可以建立在多台電腦上,共同使用mongodb雖然支持內存級別的讀寫,也支持物理存儲
因為這裡面都是鍵值對的存儲方式,所以在開始查詢的時候會用到大括弧,即使沒有任何的條件,這裡的大括弧也一定要用上。
在mongodb官網上下載,安裝以後既包含客戶端又包含伺服器端,服務端是mongod,客戶端是mongo。
一般的情況下讓mongodb伺服器在後台啟動,不會佔用一個終端,只需要在終端輸入:sudo service mongod restart
安裝服務端:
sudo apt-get install mongodb
設置資料庫埠
mongod --port 8080如果不設置默認 27017
啟動服務端:
在終端輸入:mongod
啟動客戶端:
在終端輸入:mongo
退出命令:
quit /q exit
mongodb中的一些操作命令
這裡的資料庫語句區分大小寫
展示所有資料庫名字
show dbs
創建資料庫
use 資料庫名字
當前使用的資料庫我們可以用db表示
顯示當前資料庫的集合
show collections
刪除資料庫
use mydb 這個資料庫刪除之前還需要選擇db.dropDatabase()show dbs
創建集合
db.createCollection(集合名)
刪除集合
db.集合名.drop()
刪除文檔
remove({})將文檔從集合中永久刪除
注意:
如果沒有任何參數,將會把集合內的所有文檔全部刪除,這種情況默認狀態是刪除所有文檔,所以必須注意
插入文檔
db.集合名.insert(
同時插入多個文檔,可以傳遞給insert()一個數列:
db.集合名.insert([,{文檔2},... {文檔n}])
文檔裡面都是鍵值對,中間以逗號隔開
查詢文檔
db.集合名.find()
用pretty()格式化的展示結果
db.集合名.find().pretty()
findOne()查詢集合中的一條文檔
db.集合名.findOne(),用了這條語句以後再不用加pretty()
Redis:
redis官網下載安裝包
解壓
tar zxvf redis-3.2.5.tar.gz
複製:推薦放到usr/local目錄下
sudo mv -r redis-3.2.3/* /usr/local/redis/
進入redis目錄
cd /usr/local/redis/
生成
sudo make
測試
sudo make test這段運行時間會較長
安裝:將redis的命令安裝到/usr/bin/目錄
sudo make install
運行啟動伺服器:在桌面目錄
redis-server按ctrl+c停止
啟動客戶端:在新終端中運行如下代碼
redis-cli
運行命令
pingset "a" "123"
當添加鍵值後,發現在當前運行的目錄下,創建了一個文件:dump.rdb,這個文件用於將數據持久化存儲
string
string是redis最基本的類型
最大能存儲512MB數據
string類型是二進位安全的,即可以為任何數據,比如數字、圖片、序列化對象等
設置鍵值
set key value
設置鍵值及過期時間,以秒為單位
SETEX key seconds value
設置多個鍵值
MSET key value [key value ...]
根據鍵獲取值,如果不存在此鍵則返回nil
GET key
根據多個鍵獲取多個值
MGET key [key ...]
追加值
APPEND key value
獲取值長度
STRLEN key
redis資料庫中鍵的操作類似於python當中字典的操作,我們可以簡單的來看一下
查找鍵,參數支持正則
KEYS pattern
判斷鍵是否存在,如果存在返回1,不存在返回0
EXISTS key [key ...]
查看鍵對應的value的類型
TYPE key
刪除鍵及對應的值
DEL key [key ...]
hash
hash用於存儲對象,對象的格式為鍵值對
列表
列表的元素類型為string按照插入順序排序在列表的頭部或者尾部添加元素
集合無序集合
元素為string類型元素具有唯一性,不重複
有序集合
元素為string類型元素具有唯一性,不重複每個元素都會關聯一個double類型的score,表示權重,通過權重將元素從小到大排序,元素的score可以相同
啟動redis的一些建議:
1 加上 號使redis以後台程序方式運行./redis-server &
2 啟動時指定配置文件
redis-server ./redis.conf
3 使用Redis啟動腳本設置開機自啟動
推薦在生產環境中使用啟動腳本方式啟動redis服務。啟動腳本redisinitscript 位於位於Redis的 /utils/ 目錄下。
TAG:AKDA |