PHP和MongoDB的简介
来源:互联网 发布:mac os 10.11 xcode 编辑:程序博客网 时间:2024/04/30 10:47
MongoDB简介:
我们中的大多数人都已经逐渐的形成了LAMP的概念,但是很多时候维护和测量 LAMP的基本设置显得十分痛苦。通常测量LAMP最困难的部分在于Mysql的设置。运行大数据量的网站(基于Mysql的数据处理和测量)通常是十分复杂的任务。这就是NoSQL诞生的开始。NoSQL是一个非常宽泛的术语,并且NoSQL的一些选项会比其它的数据库更好。目前我坚定地的选择 MongoDB为NoSQL的数据库。尽管MongoDB是Nosql阵营中相对较新的数据库,但是其相当成熟,并且具有令人惊讶的文档。
安装MongoDB
如果你的服务器环境是Nginx,你可以使用perl来进行MongoDB的安装,如下所示:
pecl install mongo
对于windows用户来说,你需要下载MongoDB库和相应的PHP拓展。
同时也不要忘记将MongoDB的拓展添加到你的php的配置文件php.ini中。如下:
extension=mongo.so
可见,安装MongoDB十分的轻而易举。
MongoDB基础
对于那些仅仅有相关数据库经验如Mysql、Postgresql等等的开发人员来说,刚开始时对于文件数据库可能有一些不易于理解。让我们通过定义一些相关的SQL数据库和非传统的文档数据库之间的关键性差异来开始我们的学习。
A,文档并没有预先定义类似table的表结构模式。
B,默认情况下并不支持连接查询,但是我们可以通过编程来实现。
1, 建立一个连接。
建立一个MongoDB的连接十分简单。如下所示:
1
<?php
2
$mongo
=
new
Mongo();
3
?>
你也可以定义一个地址,如下所示:
1
<?php
2
$mongo
=
new
Mongo(
'127.0.0.1:1234'
);
3
?>
现在我们必须选择一个数据库,才可以进行操作,如下:
1
<?php
2
$db
=
$mongo
->ebooks;
3
//or we can also use
4
$db
=
$mongo
->selectDB(
'ebooks'
);
5
?>
注意:如果选择的数据库不存在,则MongoDB会自动创建。
Collections(收集)
和SQL数据库使用use tables相反,我们使用collections。简单地说这是收藏的文件。从一个传统的sql开发者的立场来说,这些将会与一个数据库 table(collection)和一个table(collection)的入口相对比。然而,MongoDB的文件数据库方式更加灵活。每一个文件都可以有子文档。
创建或检索一个(Collections)收集:
1
<?php
2
$collection
=
$db
->ebooks;
3
//or like above
4
$collection
=
$db
->selectCollection(
'ebooks'
);
5
?>
如上所示,如果收集不存在,则会自动创建。最长的收集名长度为128个字符。
注意:收集名包含了数据库名和索引,所以做好把收集(collection)名控制在80个字符之内。
2, 插入文件数据。
插入一个文件十分简单,如下所示:
1
$authors
=
$db
->authors;
2
$author
=
array
(
3
'first_name'
=>
'Thomas'
,
4
'last_name'
=>
'Johnson'
,
5
'website'
=>
'http://www.tomfmason.net'
6
);
7
$author_id
=
$authors
->insert(
$author
);
插入的返回值是一个对象id,你也可以传递一个额外的参数'safe',来告诉MongoDB直接返回。这样处理数据更加快,但是你并不知道是否成功插入数据。这个选项在插入大量数据时十分有用。
3,查询文件数据。
先假定在我们的ebooks collection(实际上就是SQL类数据库的table表)中有如下数据:
1
$ebook
=
array
(
2
'title'
=>
'An introduction to PHP and Mongodb'
,
3
'description'
=>
"Mongodb is an up and coming document oriented database that supports many awesome features including native PHP extension, an easy to use query interface and it is blazing fast. "
,
4
'author_id'
=>
$author_id
,
5
'reviews'
=>
array
()
6
);
7
$ebooks
->insert(
$ebook
);
和
1
$ebook
=
array
(
2
'title'
=>
'php and mongo: A simple scalable CMS tutorial'
,
3
'description'
=>
"Some nice description here. "
,
4
'author_id'
=>
$author_id
,
5
'reviews'
=>
array
()
6
);
7
$ebooks
->insert(
$ebook
);
我们可以像下面示例中那样对作者的ebook进行检索。
1
$filter
=
array
(
2
'author_id'
=>
$author_id
3
);
4
$my_ebooks
=
$ebooks
->find(
$filter
);
5
foreach
(
$my_ebooks
as
$book
) {
6
echo
$book
[
'title'
] .
"<br />"
;
7
echo
$book
[
'description'
] .
"<br />"
;
8
}
容易让人疑惑的是通过id查询,假设我们的id是一个字符串'4cffb213726e24640d000000',在如下代码中你是获取不到数据的。
1
$author_id
=
"4cffb213726e24640d000000"
;
2
$filter
=
array
(
'_id'
=>
$author_id
);
3
$author
=
$authors
->findone(
$filter
);
这是因为在MongoDB中id不是一个简单的字符串,而是一个MongId对象。你必须按照下面的方式来操作:
1
$author_id
=
new
MongoId(
"4cffb213726e24640d000000"
);
2
$filter
=
array
(
'_id'
=>
$author_id
);
3
$author
=
$authors
->findone(
$filter
);
4, 更新文件数据。
现在,我们假定作者想要更新他们的网址,这在MongoDB中十分简单:
1
$filter
=
array
(
'_id'
=>
$author_id
);
2
$update
=
array
(
3
'$set'
=>
array
(
'website'
=>
'http://www.phpfreaks.com'
)
4
);
5
$authors
->update(
$filter
,
$update
);
假定我们想要向ebooks中添加一些信息,照下面做就可以:
1
$filter
=
array
(
'_id'
=>
$ebook_id
);
2
$review
=
array
(
3
'name'
=>
'Thomas Johnson'
,
4
'email'
=>
'tomfmason@phpfreaks.com'
,
5
'website'
=>
'http://www.tomfmason.net'
,
6
'review'
=>
'MongoDB is awesomesauce'
7
);
8
$update
=
array
(
9
'$push'
=>
array
(
'reviews'
=>
$review
)
10
);
11
$ebooks
->update(
$filter
,
$update
);
参见MongoDB Modifier Operations documentation获取更多关于MongoDB的模式修改器,如$set, $unset,$push等信息
5,删除文件数据。
删除文件数据和查询、更新操作是一样的,如下:
1
<?php
2
$filter
=
array
(
'_id'
=>
$ebook_id
);
3
$ebooks
->remove(
$filter
,true);
4
?>
GridFS
“GridFS提供了一种机制---对于透明划分在多样文件中的一个大文件。这使我们能够有效地储存的大型物体,而且在特别大的文件,例如视频,允许范围内操作(例如,只取回文件的前第N个字节)。”
在我个人看来,MongoDB的GridFS是其本身最重要的一部分。GridFS很像一个标准收取存储文件。这是一个简单的例子:
1
$meta_data
=
array
(
2
'name'
=>
"ebook.pdf"
,
3
'type'
=>
'ebook'
,
4
'description'
=>
'An awesome example ebook'
,
5
'ebook_id'
=>
'4cffb69f726e24d404000000'
,
6
'downloads'
=> 0
7
);
8
$grid
=
$db
->getGridFS();
9
$file_id
=
$grid
->storeFile(dirname(
__FILE__
) . DIRECTORY_SEPARATOR .
'ebook.pdf'
,
$meta_data
);
如果我们用php代码来上传这个电子书我们会使用storeUpload代替。这使得在MongoDB存储php文件上传绝对是轻而易举的。
现在,我们可以像处理其他collection一样来搜索上传的文件。
1
$filter
=
array
(
'_id'
=>
$file_id
);
2
$file_data
=
$grid
->findone(
$filter
);
3
echo
$file_data
->file[
'description'
];
结论:
在得到一些私人的评论中我想我要回来,然后添加一个更好的结论。简而言之, MongoDB给我留下了深刻的印象,我将尽可能多的使用MongoDB。然而,我们都需要牢记:并非每一个工具对每一份工作都是合适的。如果你需要一个高度可靠的数据库,速度极快的读/写或要更新率非常高,那么MongoDB是解决这些类型问题的完美工具。
- PHP和MongoDB的简介
- MongoDB的简介和使用
- mongodb的简介和应用
- MongoDB 和 MongoMapper的示例用法简介
- MongoDB的简介和使用(基于JAVA)
- MongoDB安装和简介
- mongoDB 简介和 安装
- MONGODB的特性和PHP-MONGODB环境的搭建
- PHP 驱动 MongoDB 的方法和技巧
- PHP 驱动 MongoDB 的方法和技巧
- mongoDB的MapReduce简介
- mongoDB的MapReduce简介
- MongoDB - 简介和快速搭建
- PHP的curl简介和简单运用
- PHP的PDO简介和使用
- php mongoDB 的curd
- php mongoDB 的curd
- mongodb的php驱动
- DM8168智能视频跟踪系统
- dll共享数据
- ssh框架下 url 路径问题
- 【练手】关于FileNameFilter的用法
- Android调用自身相机拍照并保存拍摄的照片到手机的sd卡
- PHP和MongoDB的简介
- 综合除法求解特征多项式
- UltraEdit使用技巧
- C++ debug "cannot find the file Debug\***.pch" & how to debug multi-projects under one solution
- 设计模式大集锦 程序员面试全攻略
- objective-c 单例模式Singleton的实现
- TimesTen内存数据库-第一章 Cache Connect to Oracle概念
- 使用dbms_metadata.get_ddl遇到ORA-31603
- adb 卸载android系统程序