php实现异构数据库同步的简单介绍

如何使网页页面和数据库同步刷新?用php,jsp什么的都可以主动同步也许需要用socket,很是麻烦 , 我也说不清
你可以用被动php实现异构数据库同步的方式,大致意思就是php实现异构数据库同步:页面定时询问数据库服务器,数据是否有修改,如果有修改,页面就更新自己的内容 , 如果无则不需要更改
为了保持页面效率性 , 你可以设置定时时间为每5秒-1分钟一次,或者更久 , 看内容 的具体情况
为了省流量,你可以用个数据库变量来指示内容是否有变化,比如,数据更新的时间,这样每次页面只需要问下服务器最后数据更新的时间 , 就知道是否需要更新数据库,节省流量
php redis做mysql的缓存 , 怎么异步redis同步到mysql数据库 对于变化频率非常快的数据来说 , 如果还选择传统的静态缓存方式(Memocached、File System等)展示数据,可能在缓存的存取上会有很大的开销,并不能很好的满足需要,而Redis这样基于内存的NoSQL数据库,就非常适合担任实时数据的容器 。
但是往往又有数据可靠性的需求,采用MySQL作为数据存储,不会因为内存问题而引起数据丢失,同时也可以利用关系数据库的特性实现很多功能 。
所以就会很自然的想到是否可以采用MySQL作为数据存储引擎,Redis则作为Cache 。而这种需求目前还没有看到有特别成熟的解决方案或工具,因此采用Gearman+PHP+MySQL UDF的组合异步实现MySQL到Redis的数据复制 。
MySQL到Redis数据复制方案
无论MySQL还是Redis , 自身都带有数据同步的机制,比较常用的MySQL的Master/Slave模式,就是由Slave端分析Master的binlog来实现的 , 这样的数据复制其实还是一个异步过程,只不过当服务器都在同一内网时,异步的延迟几乎可以忽略 。
那么理论上也可以用同样方式 , 分析MySQL的binlog文件并将数据插入Redis 。但是这需要对binlog文件以及MySQL有非常深入的理解,同时由于binlog存在Statement/Row/Mixedlevel多种形式,分析binlog实现同步的工作量是非常大的 。
因此这里选择了一种开发成本更加低廉的方式,借用已经比较成熟的MySQL UDF,将MySQL数据首先放入Gearman中,然后通过一个自己编写的PHP Gearman Worker,将数据同步到Redis 。比分析binlog的方式增加了不少流程,但是实现成本更低,更容易操作 。
Gearman的安装与使用
Gearman是一个支持分布式的任务分发框架 。设计简洁 , 获得了非常广泛的支持 。一个典型的Gearman应用包括以下这些部分:
Gearman Job Server:Gearman核心程序 , 需要编译安装并以守护进程形式运行在后台
Gearman Client:可以理解为任务的收件员,比如在后台执行一个发送邮件的任务,可以在程序中调用一个Gearman Client并传入邮件的信息 , 然后就可以将执行结果立即展示给用户,而任务本身会慢慢在后台运行 。
Gearman Worker:任务的真正执行者 , 一般需要自己编写具体逻辑并通过守护进程方式运行,Gearman Worker接收到Gearman Client传递的任务内容后 , 会按顺序处理 。
以前曾经介绍过类似的后台任务处理项目Resque 。两者的设计其实非常接近,简单可以类比为:
Gearman Job Server:对应Resque的Redis部分
Gearman Client:对应Resque的Queue操作
Gearman Worker:对应Resque的Worker和Job
这里之所以选择Gearman而不是Resque是因为Gearman提供了比较好用的MySQL UDF,工作量更小 。
安装Gearman及PHP Gearman扩展
以下均以Ubuntu12.04为例 。
apt-get install gearman gearman-server libgearman-dev

推荐阅读