您的位置:首页 > 运维架构 > 网站架构

网站禾 只 分之我见

2015-09-08 11:14 543 查看
数据库:

* 专库

水平表(以用户ID 取100模来建表)

增加当天的日期字段来方便取同一天的数据。

CREATE TABLE `jifen_log90` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '积分记录表',

`uid` int(10) unsigned NOT NULL DEFAULT '0',

`from` tinyint(2) unsigned NOT NULL DEFAULT '0' COMMENT '1界面',

`channel` tinyint(2) unsigned NOT NULL DEFAULT '0' COMMENT '1www2m3app',

`action` mediumint(8) unsigned DEFAULT '0' COMMENT '获取积分的动作',

`credits` mediumint(8) unsigned DEFAULT '0' COMMENT '获得积分的数目',

`addtime` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '获得时间',

`day` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '当天时间',

PRIMARY KEY (`id`),

KEY `idx_uda` (`uid`,`day`,`action`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

总表(在添加用户积分时 同步更新),

CREATE TABLE `jifen_total` (

`uid` int(10) unsigned NOT NULL DEFAULT '0',

`total` int(10) NOT NULL DEFAULT '0',

`updatetime` int(10) unsigned NOT NULL DEFAULT '0',

PRIMARY KEY (`uid`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

配置表(可在项目库中,方便管理),

CREATE TABLE `jifen_config` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`code` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '埋码值',

`title` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '标题',

`credits` int(11) NOT NULL DEFAULT '0' COMMENT '单次积分',

`max_credits` int(11) NOT NULL DEFAULT '0' COMMENT '每日最大积分',

`max_num` int(11) NOT NULL DEFAULT '0' COMMENT '每日最多次数',

`addtime` int(11) NOT NULL COMMENT '添加时间',

`updatetime` int(11) NOT NULL COMMENT '更新时间',

`status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态 1启用,0禁用',

`type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '类型,0多端显示,1web端,2app端',

`order` int(11) NOT NULL DEFAULT '0' COMMENT '排序',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COLLATE=utf8_bin

==========================================由定时维护方便分析

每天总积分统计

CREATE TABLE `jifen_count` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '积分统计',

`total` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '总分',

`www` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'www端',

`m` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'm端',

`app` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'APP端',

`day` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '日期',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8

每天分类积分统计

CREATE TABLE `jifen_count_detail` (

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,

`actid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '积分配置',

`total` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '总积分',

`www` int(11) unsigned NOT NULL DEFAULT '0',

`m` tinyint(11) unsigned NOT NULL DEFAULT '0',

`app` tinyint(11) unsigned NOT NULL DEFAULT '0',

`day` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '时间',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=89 DEFAULT CHARSET=utf8 COLLATE=utf8_bin

程序缓存使用

每次添加积分:

1 用数据库判断是否已达到每日限额;

2 如果总积分存在,就更新,不存在刚不更新,等待用户获取的时候再更新缓存

3删除每日各项jifen的redis hset

4 更新分表和总表的时候要使用事务操作

*减少redis数据存储量,减少数据维护量,减少结构点

每次获取数据的时候再更新缓存
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: