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,也可以直接在命令中断下载。

[[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操作。

时间: 2024-10-19 20:27:14

mongodb在WEB开发中的应用与实践的相关文章

Redis在WEB开发中的应用与实践

一.Redis概述: Redis是一个功能强大.性能高效的开源数据结构服务器,Redis最典型的应用是NoSQL.但事实上Redis除了作为NoSQL数据库使用之外,还能广泛应用消息队列,数据堆栈以及数据缓存等众多场合.Redis与Memcached相类似,都是以键值对(key-value)存放数据的,但是Redis支持的数据类型及特性远比Memcached丰富. 在缓存应用方面,Redis同样也是一个内存数据库,拥有Memcached的快速.稳定等特性,并且支持数据快照功能,开发人员可以通过配

《Node.js+MongoDB+AngularJS Web开发》读书笔记及联想

总体介绍 <Node.js+MongoDB+AngularJS Web开发>,于2015年6月出版,是一本翻译过来的书,原书名为<Node.js,MongoDB and AngularJS Web Development>,总的来说是一本讲述如何用Javascript进行B/S架构全栈开发的书. 该书主要讲解4种技术(框架),分为6个部分29个章节.4种技术即Node.js.MongoDB.Express.AngularJS,业内称为MEAN:6个部分我个人理解为: 基础(引言).

Node.js+MongoDB+AngularJS Web开发

这篇是计算机类的优质预售推荐>>>><Node.js+MongoDB+AngularJS Web开发> MEAN全栈工程师首部实战书 从服务器到浏览器基于JavaScript的Web应用程序权威指南 内容完整细致可直接用来入门任一技术 编辑推荐 Node.js是一种领先的服务器端编程环境,MongoDB是最流行的NoSQL数据库,而AngularJS正迅速成为基于MVC的前端开发的领先框架.它们结合在一起使得Web程序员能够完全用JavaScript创建从服务器到客户端

[Java Web]2\Web开发中的一些架构

1.企业开发架构: 企业平台开发大量采用B/S开发模式,不管采用何种动态Web实现手段,其操作形式都是一样的,其核心操作的大部分都是围绕着数据库进行的.但是如果使用编程语言进行数据库开发,要涉及很多诸如事务.安全等操作问题,所以现在开发往往要通过中间件进行过渡,即,程序运行在中间件上,并通过中间件进行操作系统的操作,而具体一些相关的处理,如事务.安全等完全由中间件来负责,这样程序员只要完成具体的功能开发即可. 2.Java EE架构: Java EE 是在 Java SE 的基础上构建的,.NE

Web开发中的18个关键性错误

前几年,我有机会能参与一些有趣的项目,并且独立完成开发.升级.重构以及新功能的开发等工作. 本文总结了一些PHP程序员在Web开发中经常 忽略的关键错误,尤其是在处理中大型的项目上问题更为突出.典型的错误表现在不能很好区分各种开发环境和没有使用缓存和备份等. 下面以PHP为例,但是其核心思想对每一个Web程序员都是适用的. 应用程序级别的错误 1.在开发阶段关闭了错误报告 我唯一想问的是:为什么?为什么在开发的时候要关闭错误报告? PHP有很多级别的错误报告,在开发阶段我们必须将它们全部开启.

Web 开发中 20 个很有用的 CSS 库

转自:http://www.oschina.net/translate/css-libraries-for-developers 在过去的几年中,CSS已经成为一大部分开发者和设计者的最爱,因为它提供了一系列功能和特性.每个月都有无数个围绕CSS的工具被开发者发布以简化WEB开发.像CSS 库,框架,应用这样的工具能够为开发者做很多事,而且可以使开发者创造出创新立异的WEB应用. 在这篇文件章中我们找到了一系列对开发者有用的CSS库,它们能帮助开发者在一定的期限内取得有创造性和创新性的成果.我们

Web 开发中很实用的10个效果【附源码下载】

在工作中,我们可能会用到各种交互效果.而这些效果在平常翻看文章的时候碰到很多,但是一时半会又想不起来在哪,所以养成知识整理的习惯是很有必要的.这篇文章给大家推荐10个在 Web 开发中很有用的效果,记得收藏:) 超炫的页面切换动画效果 今天我们想与大家分享一组创意的页面切换熊效果集合.我们已经在示例中罗列了一组动画,可以被应用到页面切换过程中,创造出很有趣的导航效果. 立即下载      在线演示 美!视差滚动在图片滑块中的应用 视差滚动(Parallax Scrolling)已经被广泛应用于网

Web开发中 前端路由 实现的几种方式和适用场景

浅析Web开发中前端路由实现的几种方式 主题 Web开发 故事从名叫Oliver的绿箭虾`说起,这位大虾酷爱社交网站,一天他打开了 Twitter ,从发过的tweets的选项卡一路切到followers选项卡,Oliver发现页面的内容变化了,URL也变化了,但为什么页面没有闪烁刷新呢?于是Oliver打开的网络监控器(没错,Oliver是个程序员),他惊讶地发现在切换选项卡时,只有几个XHR请求发生,但页面的URL却在对应着变化,这让Oliver不得不去思考这一机制的原因- 叙事体故事讲完,

如何OE开发中实现一个在web开发中的小效果

近期公司里面有一个需求,就是当业务人员点击订单列表中的某一条时希望打开一个新的窗口动作,然后把这一条记录中的某些值带过去,这样一个效果在web开发中很简单,或许就是分分钟的事情.但是在客户端这种开发中确实不易,尤其是OpenERP这种有诸多限制的框架里面. 那么如何实现呢? 这个地方我的想法主要分两步:1.打开一个新的窗口(Form视图的)2.把值带入到新的窗口里面. 第一步里面我按日常的操作在view里面创建一个向导(wizard),然后给name和id赋值,然后在创建一个wizard文件(名