當前位置:
首頁 > 最新 > 簡析三大資料庫

簡析三大資料庫

我們為什麼要學習資料庫

了解資料庫,我們首先需要區分一下資料庫和數據倉庫

資料庫是一種邏輯概念,用來存儲數據的倉庫,側重存儲

數據倉庫:從數據量來說,數據倉庫要比資料庫龐大的多,主要用於數據挖掘和數據分析。

在這裡我們可以類比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伺服器負責寫數據,其他的伺服器負責讀數據,主伺服器的數據也會自動的同步給其他的從伺服器。


安裝服務端:

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;

其實資料庫的使用最常用最重要的也是查詢,當然查詢的話需要各種各樣的條件限定,這就需要大家針對查詢這一塊做一個文檔總結,這完全有必要,因為這一塊的信息量太大了,在此不再贅述。

文檔型資料庫,數據結構由鍵值對組成,適用於事件的記錄,內容管理或博客平台,通過第三方平台訪問和抓取數據

它的性能比較好,是因為它是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


這裡的資料庫語句區分大小寫

展示所有資料庫名字

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官網下載安裝包

解壓

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/ 目錄下。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AKDA 的精彩文章:

TAG:AKDA |