mongodb在WEB開發中的應用與實踐


一、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操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM