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操作。
mongodb在WEB开发中的应用与实践的更多相关文章
- Redis在WEB开发中的应用与实践
Redis在WEB开发中的应用与实践 一.Redis概述: Redis是一个功能强大.性能高效的开源数据结构服务器,Redis最典型的应用是NoSQL.但事实上Redis除了作为NoSQL数据库使用之 ...
- 《Node.js+MongoDB+AngularJS Web开发》读书笔记及联想
总体介绍 <Node.js+MongoDB+AngularJS Web开发>,于2015年6月出版,是一本翻译过来的书,原书名为<Node.js,MongoDB and Angula ...
- 【初码干货】使用阿里云对Web开发中的资源文件进行CDN加速的深入研究和实践
提示:阅读本文需提前了解的相关知识 1.阿里云(https://www.aliyun.com) 2.阿里云CDN(https://www.aliyun.com/product/cdn) 3.阿里云OS ...
- Web 开发中很实用的10个效果【附源码下载】
在工作中,我们可能会用到各种交互效果.而这些效果在平常翻看文章的时候碰到很多,但是一时半会又想不起来在哪,所以养成知识整理的习惯是很有必要的.这篇文章给大家推荐10个在 Web 开发中很有用的效果,记 ...
- WEB开发中的字符集和编码
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- Web 开发中很实用的10个效果
在工作中,我们可能会用到各种交互效果.而这些效果在平常翻看文章的时候碰到很多,但是一时半会又想不起来在哪,所以养成知识整理的习惯是很有必要的.这篇文章给大家推荐10个在 Web 开发中很有用的效果,记 ...
- Web开发中管理ipad屏幕的方向变化
Web开发中,我们会遇到在手机垂直或水平视角时展示不同状态的情况.下面我来总结一下检测移动设备方向变化的一些方法. 1 使用javascript 直接看代码: <script type=&quo ...
- 今日推荐:10款在 Web 开发中很有用的占位图片服务
设计网站时,将要使用的图像在一开始通常还不存在,这个时候布局是最重要的.然而,图像的尺寸通常是预先设置,实用一些占位图像可以帮助我们更好地预览和分析布局. 如今,有免费的占位图片自动生成工具可以使用, ...
- Web 开发中应用 HTML5 技术的10个实例教程
HTML5 作为下一代网站开发技术,无论你是一个 Web 开发人员或者想探索新的平台的游戏开发者,都值得去研究.借助尖端功能,技术和 API,HTML5 允许你创建响应性.创新性.互动性以及令人惊叹的 ...
随机推荐
- 【BZOJ-1090】字符串折叠 区间DP + Hash
1090: [SCOI2003]字符串折叠 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1127 Solved: 737[Submit][Stat ...
- BZOJ1040 [ZJOI2008]骑士
Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各 界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战 ...
- ListView优化-通用ViewHolder编写备份
ViewHolder.java package cn.edu.bzu.util; import android.content.Context; import android.util.SparseA ...
- struts2 Advanced Learning
catalog . 引言 . struts2的类型转换 . struts2的输入校验 . struts2的拦截器机制 . 使用struts2的Ajax支持 . struts2 OGNL表达式 . st ...
- C#实现 Eval
主要是使用 CSharpCodeProvider,动态调用来进行返回. 首先会拼接成一个类的一个方法,然后返回这个方法的值.不过,因为还是使用反射,所以效率不高. public static clas ...
- NYOJ 16 矩形嵌套(经典动态规划)
传送门 Description 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于 ...
- HTML5学习总结-08 应用缓存(Application Cache)
一 应用缓存(Application Cache) 1 应用缓存 HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问. 应用程序缓存为应用带来三个优势: ...
- 4 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之Lvs为Mysql-slave做负载均衡
preface Mysql+drbd+heart能够实现Mysql的高可用了,master出现故障的时候能够快速切换.在现在的业务情况下,读操作多,写操作少的情况下,一台DB server明显扛不住, ...
- DNS(一)之禁用权威域名服务器递归解析
DNS dns是互联网中最核心的带层级的分布式系统,负责把域名解析成ip,把IP解析出域名,以及宣告邮件路由信息等等,使得使用域名访问网站,收发邮件成了可能. bind(berkeley Intern ...
- BZOJ4690: Never Wait for Weights
裸带权并查集. #include<cstdio> #define N 100005 int m,i,j,s,t,u,d[N],p[N]; char k; int find(int i){ ...