MongoDB通读《权威指南》学习日记

2014/09/22 | 星期一 分类:数据库 | 没有评论 标签: | 作者: | 888 views

MongoDB 是面向文档的数据库,文档是一个抽象的概念,其具体的呈现形式取决于使用的驱动和编程语言(Binary JSON) BSON

  1. MongoDB 的”文档” document 相当于 MySql 的”行” row;
  2. MongoDB 的”集合” 可以看做是没有模式的表;.
  3. MongoDB 的每个文档都有一个特殊的键”_id” 它在所有的集合中是唯一的。

#Win 下运行 mongo 命令:先进入mongo安装目录;
mongod –dbpath = d:\data\db

.使用find 或者 findOne 函数和查询文档对数据执行查询;
.使用 $ 条件查询实现范围,计划包含,不等式和其他查询;.
.有些查询用查询文档,甚至 $ 条件语句都不能表达,对于此类复杂的查询使用 $where 字句,用强大的JavaScript 来表达;
.查询返回一个数据库游标,游标只有在你需要的时候才会惰性地批量返回;
.还有很多针对游标执行的元操作,包括忽略一定数量的结果,或者限定返回结果,还有对结果排序。

GridFS 存储文件
通过数据库命令使用高级特性,使用一种特殊的集合,固定大小的集合使用GridFS存储大文件;利用MongoDB对服务器JavaScript的支持理解何为数据库引用,何时使用。

#获取运行中MongoDB 服务器统计信息
db.runCommand({“serverStatus”:1})

#backup MongoDB 数据库 paddy (文件默认保存在mongoDB安装目录下)
mongodump -d paddy -o backup
#还原数据库 paddy to paddyok
mongorestore -d paddyok –drop backup/paddy/

#搭配 master slave mongoDB 主从配置
mongo –dbpath=d:\data\db –port 27017 –master
mongo –dbpath=d:\data\slaves –port 27018 –slave –source localhost:27017

#MongoDB 诊断,复制
db.printReplicationInfo();
db.printSlaveReplicationInfo();

MongoDB 默认的存储引擎是内存映射引擎,当服务器启动后,将所有的数据文件映射到内存,然后由操作系统来负责将缓冲数据写入磁盘并将数据调入调出内存页面;

  1. MongoDB管理内存的代码非常精炼,原因就是将大部分的工作推给了操作系统;
  2. MongoDB服务器进程的虚拟大小通常非常大,超过整个数据集的大小,这没关系,操作系统会处理让那些数据常驻内存;
  3. MongoDB不能控制数据库写入到磁盘的顺序,也就是不能用预写日记提供单机的持久性;
  4. MongoDB数据库在32机器智能处理2GB数据;.

PS:通读一本数MongoDB的书,有点乱,有兴趣的就把它记录下来写入到日记,往后细读的时候再细写日记。

PHP开发Cakephp框架MongoDB数据库

2013/05/14 | 星期二 分类:资源 | 没有评论 标签: , | 作者: | 1,511 views

在一个全新的工作环境下,使用PHP开发Android(安卓)应用。

项目组选择Cakephp,众多PHP开发框架中的一个,使用过其他框架比如:Yii Zend Framework Codeilgniter Thinkphp之一者,上手并不是很难,就不再细说了。

应用:在许多场景下使用MongoDB替代传统的关系型数据库或键/值(key-value)存储方式,目前公司项目就用这个存储。
MongoDB非常适合实时的插入,更新与查询,PHP操作起来特别方便快速,易于上手;对于Mongo更多的功能待续学习与发掘。

NoSQL,指的是非关系型的数据库(NoSQL = Not Only SQL 不仅仅是SQL) 2009年开始迅速发展起来的非关系型的数据存储。而本人有幸在新公司中使用这个NoSQL 之 MongoDB存储数据的应用开发。

人对新鲜的事物,内心总是充满着好奇,并为之寻求探索。

MongoDB百度百科是这样描述的:
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的;
MongoDB支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型;
MongoDB最大的特点是支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

由于学习MongoDB,必须要了解NoSQL相关知识,先记下如下知识点:

1.High performance – 对数据库高并发读写的需求;
2.Huge Storage – 对海量数据的高效率存储和访问的需求;
3.High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求;
4.数据库事务一致性需求;
5.数据库的写实时性和读实时性需求;
6.对复杂的SQL查询,特别是多表关联查询的需求。

总之:新技术的出现都是为了解决某一领域的特定需求。

NoSQL特点:
1.可以处理超大量的数据;
2.运行在便宜的PC服务器集群上;
3.击碎了性能瓶颈;
4.没有过多的操作;
5.Bootstrap支持(项目开源,社区中寻求支持)。

NoSQL优点:1.易扩展;2.大数据量,高性能;3.灵活的数据模型;4.高可用。
NoSQL缺点:1.没有正式的官方支持,万一出了差错会是可怕的;2.并未形成一定标准,各种产品层出不穷,内部混乱,各种项目还需时间来检验。