用户向系统申请,系统会随机给用户生成一个不重复的短网址 xx.xx.xx/abced1用于编辑内容(其中abcde1就是短网址标识,称coding)
现在要统计所有coding的访问记录。
目前有一张access_log表,每当某个coding的短网址被访问时,先是根据UA信息、ip地址、有效时间经过算法得到一个uvmark(访客标识),如果表里已经有相同的uvmark,表示是同一个人访问了多次,此时不做insert记录,而是update该条数据的number字段+1。不过没有uvmark,就添加insert一条记录(记录包括coding.访问的设备.系统环境.浏览器环境.访问城市.访问时间等等)
但是随着访问量的增大,表里的数据已经非常多了。将近9000万条数据,每天增量大概200万。统计一些扫描量大的码,比如按时间的sql是这样的: select number from access_log where coding = XXXX and time between time_start and time_end
取出来的数据 uv就是条数的数量 pv就是每条的number相加(按地域.环境等等同理) 效率比较低。如果一个短网址每天平均有2W的访问量,那么我要统计他最近一个月的访问量,需要的时间达到50S以上
随便找了个coding的访问统计。如下
我这么做有问题吗? 有可以优化的地方吗?像百度统计这种的数据库设计是怎样的,为什么感觉他们的非常快。