PHP-网站来源统计数据库表设计
最近公司有个需求,就是统计用户从哪个地方跳转到我们网站的,我目前的实现是,在进入首页前获取到来源网址,然后写入数据库,表设计如下:
CREATE TABLE gao_referer_count
(id
bigint(20) NOT NULL AUTO_INCREMENT, 自增长IDreferer_url
varchar(80) NOT NULL, 来源网址referer_path
varchar(255) NOT NULL DEFAULT '', 请求路径referer_query
varchar(255) NOT NULL DEFAULT '', 请求参数access_time
datetime NOT NULL, 请求时间access_ip
varchar(80) NOT NULL, 请求IP
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=85 DEFAULT CHARSET=utf8;
基本上过1个多小时就写入了1W多条数据,因为本人对数据库表的设计和优化也只略懂皮毛,所以表也设计的比较耿直和简单,因为怕时间长了会出现性能问题,所以在这里请教各位有什么其它设计思路和优化方案
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
统计表和业务表的设计,其实有很多不同, 最大的不同就是业务的查询相对刻板,简单。 数据类型也比较好确定。 但是统计表查询就复杂了很多,而且变化性非常强。
针对这个表,如果你只要统计url相关信息,我觉得是设计上没有太大的偏差,我赞同你的设计。 但是如果你要把“用户从哪进入”和“用户后续行为”看成一个完整流程,并分析不同渠道,不同转化率或不同的行为特征的话。那么这个表显然是单薄了很多,你至少需要思考uid的关联问题。
这个表本身也许就是最大的问题。一小时1w多条还好,数据量和增长速度都很小, 使用分表技巧和索引技巧可以解决很多后续查询问题。 但是就这个需求而言, 本身就应该是日志级的处理方式。 而是不是关系型数据库的处理方式。 把这种类似日志的原始数据存在mysql数据库里面,在大并发的前提下,也许本身就是最大的问题
这个并非是关系型的数据,建议采用nosql数据库存储,譬如mongoDb之类的,一般这个随着访问量递增的数据一般是不会存放在这种关系型数据库的