標籤:
一、mongodb是什嗎?
一套高效能、易開發的文檔型資料庫。他使用索引值對形式存放資料,能夠存放包括字串、數組、資料序列、圖片、視頻等在內的大多數資料文檔。MongoDB完善的設計,搞笑的可程式化性使其成為當前NoSQL產品最熱門的一種。
二、NoSQL概述
1、全稱Not Only SQL,指的是非關係型資料庫。傳統的關係型資料庫是於SQL語言進行操作的,雖然在功能上足夠強大,但由於一在局部上只需要簡單的資料操作,傳統的關係型資料庫顯得效率低下。隨著Web2.0的到來,SNS應用的興起,對資料庫效能了苛刻的要求,關係型資料庫也暴露出期難以解決的問題。NoSQL由於其本身的特點迅速得到發展
2、飛關係型資料庫與關係型資料庫最大的區別就是處理邏輯上的不同,但是用的目的是相同的(都是用於存放資料)。飛關係型資料庫使用資料集存放資料,在資料操作上沒有統一的操作語言,如果使用過Memcache的話,那麼對非關係型資料庫並不會感到陌生,因為Memcache就屬於非關係型資料庫的雛形。
3、在使用方式上,非關係型資料庫使用索引值對存放方式。單資料庫畢竟首先要有庫的概念,才能成為資料庫,例如資料類型CURD操作、使用者權限、資料索引、資料備份、資料同步等,這些都是資料庫所共有的概念。NoSQL同樣具備這些概念,甚至在功能上更加豐富。
4、NoSQL的特點:
優點:
(1)處理海量資料
(2)高可用性和高可擴充性
(3)資料處理靈活高效
缺點:
(1) 沒有特定的查詢語言,也不相容SQL結構化標準查詢語言。
(2) NoSQL對萬展局部資料操作提供了良好的支援,但並不表示NoSQL適合網站的全部應用範疇,也並不表示NoSQL可以代替關係型資料庫。例如事務性較高的、需要奪標複雜查詢的以及傳統的只能商務型網站,並不適合選用NoSQL。
(3) NoSQL是為瞭解決大資料存放區而生的,相對於關係型資料庫,氣還不夠成熟。此外NoSQL資料庫還沒有比較完善的商業化支援。
5、MogonDB特點:
MogonDB是NoSQL資料庫中比較著名的一個,其最大的特點就是特性豐富,功能強大、使用簡單。MogonDB官方一直標榜其為最像關係型資料庫的非關係型資料庫,事實上也是如此。
MogonDB使用BSON資料格式作為資料存放結構,BSON資料格式就是Json資料格式的二進位話,對於開發人員而言,在使用及表現形式上兩者是一致的。也就是說開發人員可以使用熟悉的Json對MogonDB所有的資料結構進行操作,例如資料集(表)的增刪改查等。
MogonDB鬆散的資料結構,豐富了資料特性及後期擴充,並且能夠支援關係型資料庫中的主鍵ID、資料為異性、資料索引、資料校正等。具體的特性如下。
? 模式自由。支援動態查詢、完全索引,可以方便地對文檔中內嵌的對象及數組進行檢索。
? 面向文檔儲存。開發人員可以將現有的序列文檔直接匯入到MogonDB資料集中。
? 高效的儲存機制。MogonDB對資料並沒有特殊的限制,任何資料(包括大型的圖片、視頻等)儲存到MogonDB資料庫中,最終都將被轉換為位元據,從而在一定程度上保證讀寫的搞笑,以及確保資料完整、安全等。
? 支援複製和故障恢複。提供了主-從、主-主模式的資料複製及伺服器之間的資料複製。
? 自動分區並支援雲層級的伸縮性。支援水平的資料庫叢集,可以動態添加額外的伺服器。
? 支援Python、PHP、Ruby、Java、C、C#、JavaScript、Perl及C++語言的驅動程式。
? 完全支援分布式架構。
? Sphinx1.x開始支援MongoDB驅動。
6、安裝MongoDB
1、在windows下安裝MongoDB:略。
2、在linux下安裝MongoDB:
(1)下載MongoDB,開啟http://www.mongodb.org/downloads頁面,選擇相應平台的linux安裝原始碼包;這裡選擇的是2.0.8版本的MongoDB,也可以直接在命令中斷下載。
[[email protected] ~]# cd /data1/
[[email protected] data1]# wget https://fastdl.mongodb.org/linux/mongodb-linux-i686-2.0.8.tgz
[[email protected] data1]# tar zxvf mongodb-linux-i686-2.0.8.tgz
[[email protected] data1]# cd mongodb-linux-i686-2.0.8
[[email protected] mongodb-linux-i686-2.0.8]# cd /data1
[[email protected] data1]# mkdir -p /usr/local/mongodb
[[email protected] data1]# cp -R mongodb-linux-i686-2.0.8/* /usr/local/mongodb/
[[email protected] data1]# cd /usr/local/mongodb/
[[email protected] mongodb]# mkdir logs
[[email protected] mongodb]# mkdir data
完成前面的步驟,接下來就可以啟動了。
(2)啟動服務
[[email protected] bin]# ./mongod --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/logs/mongodb.log --fork
上述命令,加入了fork選項,該選項表示將mongod服務進程推送到後台運行。Mongod啟動程式還支援其他啟動可選項,分別如下:
? --dbpath:指定資料庫目錄。
? --port:指定通訊連接埠,預設是27017
? --bind_ip:綁定管理ip
? --directoryperdb:使用獨立的檔案夾存放書庫檔案。
? --logpath:置頂日誌存放目錄。
? --logappend:置頂日誌產生方式(追加、覆蓋)。
? --pidfilepath:指定進程檔案路徑,為空白則不產生進程檔案
? --keyFile:叢集模式的關鍵標識。
? --cpu:周期性地顯示cpu和io的使用率。
? --journal:開機記錄。
? --ipv6:啟用ipv6支援。
? --nssize:指定.ns檔案的大小,以MB為單位,預設16MB,最大2GB。
? --maxConns:最大的並發串連數。
? --notablescan:不允許進行表掃描。
? --quota:限制每個資料庫的檔案個數,預設為8個。
? --quotaFiles:每個資料庫的檔案個數,需要配合—quota使用。
? --noprealloc:關閉資料檔案的與分配功能。
? --auth:以使用者授權模式啟動。
MongoDB成功啟動後,預設情況下會使用27017連接埠作為通訊連接埠,通過命令可以檢測到相應的服務狀態。
[[email protected] data1]# netstat -antlp | grep 27017
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 1895/mongod
(4) 加入隨機啟動
成功啟動之後,只需要將mongod主程式加入到rc.local設定檔中即可,為了系統重新啟動時啟動MongoDB資料庫服務,首先開啟rc.local設定檔。
[[email protected] data1]# vim /etc/rc.local
然後再設定檔最後面加入mongod啟動項,如下所示:
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don‘t
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/logs/mongodb.log –fork
儲存rc.local設定檔,至此MongoDB資料庫就安裝完成了,現在iukeyi使用mongo終端管理工具登陸MongoDB資料庫了。
三、MongoDB的使用
1、理解MongoDB的資料結構,MongoDB資料結構是由資料庫(database)、集合(collection)、文檔(document)三部分組成的。其中,開發人員主要面對的是collection和document。其中資料文檔(document)是資料載體,其資料格式定義如:{文檔名:文檔內容}
2、MongoDB之所以成為最像關係型資料庫的非關係型資料庫,就是因為MongoDB也遵循關係型資料庫中的操作文法,前者使用Bson文法,後者使用SQL文法。MongoDB於關係型資料庫MySQL的結構對比,如表1所示:
表1 MongoDB於關係型資料庫MySQL的結構對比
MongoDB |
MySQL |
Databases(資料庫) |
Databases(資料庫) |
Collection(集合) |
Tables(資料表) |
Document(文檔) |
Row(列) |
Document name(文檔名稱) |
空 |
四、在MVC中使用MongoDB
1、安裝PHP擴充(linux環境下的安裝)
可以在http://pecl.php.net/package/mongo中找到相應的PHP擴充包,這裡使用的是目前最新版本mongo-1.6.14。
[[email protected] data1]# wget http://pecl.php.net/package/mongo/get/mongo-1.6.14.tgz
[[email protected] data1]# tar zxvf mongo-1.6.14.tgz
[[email protected] data1]# cd mongo-1.6.14
[[email protected] mongo-1.6.14]# /usr/bin/phpize
[[email protected] mongo-1.6.14]# ./configure --with-php-config=/usr/bin/php-config --enable-mongo
[[email protected] mongo-1.6.14]# make && make install
[[email protected] mongo-1.6.14]# ls /usr/lib/php/modules/
出現上述資訊提示,表示mongo for php擴充安裝成功,接下來開啟php.ini檔案,並加入mongo擴充模組引用。
[[email protected] ~]# vim /etc/php.ini
extension=mongo.so
最後重啟php-fpm即可
[[email protected] ~]# pkill php-fpm
[[email protected] ~]# service php-fpm start
2、ThinkPHP操作MongoDB
ThinkPHP3.x提供了對MongoDB的全面支援,將常用的CURD操作進行了封裝,讓其更適合MVC開發。
(1)設定資料庫串連,配置方式與MySQL資料庫配置方式類似,如下所示:
return array(
‘DB_TYPE‘ => ‘Mongo‘,
‘DB_HOST‘ => ‘127.0.0.1‘,
‘DB_NAME‘ => ‘test‘,
‘DB_USER‘ => ‘‘,
‘DB_PWD‘ => ‘‘,
‘DB_PREFIX‘ => ‘‘,
);
(2)測試資料庫是否串連正常,最直接的辦法就是在控制器方法中輸出資料集資訊,代碼如下:
public function test()
{
$m = new MongoModel(‘c2’);
dump($m);
}
如果輸出資料集資訊就表示連結正常,可以進行CURD操作。
mongodb在WEB開發中的應用與實踐