数据中间平台(php,mysql,redis)

来源:互联网 发布:imap.126.com 端口 编辑:程序博客网 时间:2024/03/29 02:06

一.需求描述

    从 A (外部接口,http或socket接口等等) 取到xml格式数据,然后存储到平台B(中间平台),对外部提供各种接口,返回JSON格式数据,平台C,D,E.....等等从平台B取数据,需求其实很简单,在这只是分析下中间可能的种种问题,怎么解决,也希望大家多提宝贵意见。

其中从A取数据,每次持续时间较长,估计十几分钟左右,另外C,D,E等等外部平台对B连接比较频繁,具体峰值现在还不好估算。

 

二.开发环境

    linux+php+apache+mysql+redis

 

三.设计思路

   1. 取数据模块,从A通过http接口取数据,进入mysql做持久化存储,同时数据进入redis做缓存,需要设计mysql表对应的redis结构。

       每次取数据时间较长,通过php长连接方式或php批处理方式处理,避免服务断开。

       具体方式见php长连接处理整理:http://blog.csdn.net/lxzo123/archive/2011/04/28/6370715.aspx  

   2. 对外发布http接口,同时开关控制从redis取数据还是mysql取数据,声明一点,该数据时效性较强,外部每次访问都返回最新数据

        需要提供翻页接口,默认外部连接redis缓存,当redis中取不到对应数据才进行查询mysql库。

   3. redis数据删除,由于数据每天都很多,需要对redis数据进行定期删除一些比较旧的数据,可以按一定规则进行,比如几天前的数据就删除,或者redis中数据大于一定数目,就删除最早的数据。

   4. 统计分析功能,如用户连接数,等等。

 

四.具体实现描述

    1.mysql表结构设计,再此简单设计代替,因为是公司项目。

       新闻栏目表 create table news_category (

                           id  integer, 新闻栏目ID

                           category varchar2新闻栏目名称

                        );

 

       新闻结构表 create table news_info (

                            id  integer ,新闻ID

                            title varchar2 新闻标题

                            create date 新闻发生时间

                            categoryid 所属栏目ID

                        );

 

      新闻内容表  create table news_content(

                           id integer 新闻ID

                           content varchar 新闻内容

                       );

      其它省略.

    

    2. redis对应结构体设计

        新闻栏目用hash存储  key:   news:category    field: 栏目id      value:栏目名称

        新闻ID用zset存储,因为需要翻页处理,list没有提供返回index接口,处理翻页不是特别完美(后续再说明),zset结构

                      key: news:id:index:[栏目ID]    score: (next:id:index自增为一个string)  member :新闻ID

        新闻结构体通过hast存储 key: news:info:[栏目ID]:[新闻ID]    field: 对应表中字段名称   value:对应字段值

      

 

先到此为止,改天继续补充