数据中间平台(php,mysql,redis)
2011-04-28 23:45
281 查看
一.需求描述
从 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:对应字段值
先到此为止,改天继续补充
从 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:对应字段值
先到此为止,改天继续补充
相关文章推荐
- 大数据平台架构(flume+kafka+hbase+ELK+storm+redis+mysql)
- php实现redis消息队列将数据保存到mysql
- [PHP]如何在百度(BAE)和新浪(SAE)的云平台使用PHP连接MySQL并返回结果数据
- [PHP]如何在百度(BAE)和新浪(SAE)的云平台使用PHP连接MySQL并返回结果数据
- 基于springboot+redis+bootstrap+mysql开发一套属于自己的分布式springcloud云权限架构(七)【权限架构生产者(数据字典)】
- 知名网站分享:PHP代替Perl,Redis置换MySQL,日处理过亿PV
- 详解Nginx+php-5.4+Mysql-5.5+Memcached+redis的架构部署 推荐
- php+html 表单提交数据保存到mysql中
- 将win平台上的mysql数据复制到linux上报错Can't write; duplicate key in table
- 将mysql数据导入redis
- docker-lnmp php7.2 mysql 5.6 redis nginx
- php导入大量数据到mysql性能优化技巧
- PHP将mysql数据表转换为excel文件格式
- 使用HAProxy、PHP、Redis和MySQL支撑10亿请求每周架构细节
- PHP+MySQL存储数据出现中文乱码的问题
- PHP MySQL 查询 指定 范围 日期 时间段 数据 between 用法
- php mysql数据的导入导出,数据表结构的导入导出
- 杂乱手札 - LINUX, Apache, Mysql, PHP, HTML-JS-CSS, Redis 2014 to 2016
- Centos6.4 + PHP5.5.11 + Mysql5.6.16 + Tnginx2.02 + Memcached1.4.17 + Redis2.2
- PHP / MySQL的选择页面上的数据和分割