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.并未形成一定标准,各种产品层出不穷,内部混乱,各种项目还需时间来检验。

Redis与redis主从复制

2013/04/30 | 星期二 分类:数据库 | 没有评论 标签: , | 作者: | 1,438 views

redis是一个开源的key-value数据库,它又经常被认为是一个数据结构服务器。因为它的value不仅包括基本的string类型还有list,set,sorted set和hash类型。当然这些类型的元素也都是string类型。也就是说list,set这些集合类型也只能包含string 类型。

redis可以在这些类型上做很多原子性的操作,比如对一个字符value追加字符串(APPEND命令)。加加或者减减一个数字字符串(INCR命令,当 然是按整数处理的).可以对list类型进行push,或者pop元素操作(可以模拟栈和队列)。对于set类型可以进行一些集合相关操作 (intersection union difference)。.

memcache也有类似与++,–的命令,不过memcache的 value只包括string类型。远没有redis的value类型丰富。和memcahe一样为了性能。redis的数据通常都是放到内存中的。当然 redis可以每间隔一定时间将内存中数据写入到磁盘以防止数据丢失。redis也支持主从复制机制(master-slave replication)。redis的其他特性包括简单的事务支持和 发布订阅(pub/sub)通道功能,而且redis配置管理非常简单。还有各种语言版本的开源客户端类库。

在此,简单描述下redis主从复制:redis主从复制配置和使用都非常简单。通过主从复制可以允许多个slave server拥有和master server相同的数据库副本。

redis主从复制的一些特点:
1.master可以有多个slave;
2.除了多个slave连到相同的master外,slave也可以连接其他slave形成图状结构;
3.主从复制不会阻塞master。也就是说当一个或多个slave与master进行初次同步数据时,master可以继续处理client发来的请求。相反slave在初次同步数据时则会阻塞不能处理client的请求。.
4.主从复制可以用来提高系统的可伸缩性,我们可以用多个slave 专门用于client的读请求,比如sort操作可以使用slave来处理。也可以用来做简单的数据冗余;
5.可以在master禁用数据持久化,只需要注释掉master 配置文件中的所有save配置,然后只在slave上配置数据持久化。

下面介绍下主从复制的过程:
当设置好slave服务器后,slave会建立和master的连接,然后发送sync命令。无论是第一次同步建立的连接还是连接断开后的重新连接,master都会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存起来。后台进程完成写文件后,master就发送文件给slave,slave将文件保存到磁盘上,然后加载到内存恢复数据库快照到slave上。接着master就会把缓存的命令转发给slave。而且后续master收到的写命令都会通过开始建立的连接发送给slave。从master到slave的同步数据的命令和从client发送的命令使用相同的协议格式。当master和slave的连接断开时slave可以自动重新建立连接。如果master同时收到多个 slave发来的同步连接命令,只会使用启动一个进程来写数据库镜像,然后发送给所有slave。.

redis如何配置,主从复制的:配置slave服务器很简单,只需要在配置文件中加入如下配置
slaveof 192.168.1.1 6379 #指定master的ip和端口

那么我们如何判断哪个是主哪个是从呢?我们只需调用info这个命令就可以得到主从的信息了,我们在从库上执行info命令

备注:里面有一个角色标识,来判断是主库还是从库,对于本例是一个从库,同时还有一个master_link_status用于标明主从是否异步,如果此值=up,说明同步正常;如果此值=down,说明同步异步;db0:keys=1,expires=0, 用于说明数据库有几个key,以及过期key的数量。

参考学习:http://www.cnblogs.com/redcreen/tag/redis/