一、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,也可以直接在命令中斷下載。
[root@localhost ~]# cd /data1/
[root@localhost data1]# wget https://fastdl.mongodb.org/linux/mongodb-linux-i686-2.0.8.tgz
[root@localhost data1]# tar zxvf mongodb-linux-i686-2.0.8.tgz
[root@localhost data1]# cd mongodb-linux-i686-2.0.8
[root@localhost mongodb-linux-i686-2.0.8]# cd /data1
[root@localhost data1]# mkdir -p /usr/local/mongodb
[root@localhost data1]# cp -R mongodb-linux-i686-2.0.8/* /usr/local/mongodb/
[root@localhost data1]# cd /usr/local/mongodb/
[root@localhost mongodb]# mkdir logs
[root@localhost mongodb]# mkdir data
完成前面的步驟,接下來就可以啟動了。
(2)啟動服務
[root@localhost 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端口作為通信端口,通過命令可以檢測到相應的服務狀態。
[root@localhost 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配置文件。
[root@localhost 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。
[root@localhost data1]# wget http://pecl.php.net/package/mongo/get/mongo-1.6.14.tgz
[root@localhost data1]# tar zxvf mongo-1.6.14.tgz
[root@localhost data1]# cd mongo-1.6.14
[root@localhost mongo-1.6.14]# /usr/bin/phpize
[root@localhost mongo-1.6.14]# ./configure --with-php-config=/usr/bin/php-config --enable-mongo
[root@localhost mongo-1.6.14]# make && make install
[root@localhost mongo-1.6.14]# ls /usr/lib/php/modules/
出現上述信息提示,表示mongo for php擴展安裝成功,接下來打開php.ini文件,並加入mongo擴展模塊引用。
[root@localhost ~]# vim /etc/php.ini
extension=mongo.so
最后重啟php-fpm即可
[root@localhost ~]# pkill php-fpm
[root@localhost ~]# 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操作。