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

來源:互聯網
上載者:User

標籤:

一、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開發中的應用與實踐

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.