|
原帖由 newkid 于 2010-2-5 23:39 发表 ![]()
这贴都被置顶了?
1. 利用 SELECT FROM DUAL CONNECT BY的办法可以制造大量数据,但如果你要随机性很好的话,随机函数开销还是挺大的。
2.1 是不是有一些统计指标不能叠加的,也就是说无法利用前面的统计结果?尽量把这些东西隔离出来,能利用累计的就尽量利用。
2.2 你举一个统计指标作例子,说明它的计算公式,假设单独统计一个网站你打算怎么做,然后我们看看有没有办法用GROUP BY来成批完成。
3. 临时表的原则:假如这个临时结果被反复利用就用临时表;否则,SQL中的WITH 子查询就够了。
4. 前面说了ORACLE是按数据块来读的,一次访问所有列肯定优于多次访问单独的列。
5. 还是同问题3, 看你的结果有没有可能被后面的利用。
6. 如果2解决了按时间分区就可以。
还是有点惊喜的,帖子被置为精华了,也被置顶了几天。谢谢斑竹!也感谢这么长时间以来各位高手的真知灼见
newid,这个统计,我给出详细的计算公式及策略,目前最大的难点就是如何在短时间内将这201个字段统计出来,其实整个平台系统最关键的就是
把数据统计聚合起来,至于应用层面的,没什么很难的。
1、基础数据表结构
由于是对公司的客户网站进行流量及访客行为统计分析,则目前我设计的有一张页面基础数据表
对字段的解释(方便识别数据的意义)
页面基础数据表:pd_page
page_id 页面编号(自增的ID)
page_siteid 网站编号(统计的网站)
page_sitetitle 网站标题
page_domain 受访域名
page_url 受访页面URL
page_visittime 访问时间
page_visitseconds 单个页面访问时长
page_searchflag 搜索引擎标记 0-没使用搜索引擎 1-使用了搜索引擎
page_searchparent 搜索引擎父级编号
page_search 搜索引擎(为数值类型)
0-其他 1-百度 2-谷歌 3-必应 4-搜狗 5-搜搜 6-狗狗 7-中国雅虎 8-爱问 9-中搜 10-8684 11-去哪儿
12-百度知道 13-百度贴吧 14-百度新闻 15-百度图片 16-百度地图
注:对于百度来说,百度搜索引擎是搜索引擎父级,而百度知道是隶属于百度搜索引擎,所以百度知道是单独的子级。类似于一个产品A,属于
某个产品分类,这里的搜索引擎父级和搜索引擎就类似于产品行业分类,1级产品分类,2级分类。
page_keyword 搜索的关键字
page_pv PV值
page_visitorflag 访客标记 0-新访客 1-回访客(一天24小时内,使用相同一个Cookie算做一个相同的访客,第一次访问网站为新访客)
page_identify 访客身份标识 38位长的一个字符串,是从Cookie中取出的,用来识别访客的唯一性
page_ip IP地址(这里存为的数值类型,将中间的点给去掉了,计算的时候要转换为一个大的数字)
page_isp 网络接入商类型
0-其他 1-中国电信 2-中国移动 3-中国联通 4-中国网通 5-中国铁通 6-中国卫通
7-长城宽带 8-**宽带 9-中国教育和科研计算机网 10-方正宽带 11-艾普宽带
page_browserparent 浏览器父级编号
page_browser 浏览器(类似上面的搜索引擎一样的道理,分为父级)
0-其他 1-IE6.0 2-IE7.0 3-IE8.0 4-IE9.0 5-FireFox 6-Safari 7-Chrome 8-Opera
9-遨游Maxthon 10-腾讯TT 11-360安全浏览器 12-搜狗浏览器 13-世界之窗The World
page_osparent 操作系统父级编号
page_os 操作系统(类似上面的搜索引擎一样的道理,分为父级)
0-其他 1-Win2000 2-WinServer2003 3-WinXP 4-WinVista 5-WinServer2008 6-Win7 7-linux 8-MacOS
page_resolution 分辨率 (字符类型)
page_lang 语言 0-其他 1-中文 2-英文 3-法文 4-法文 5-日文 6-俄文 7-德文
page_cookie Cookie支持 0-不支持 1-支持
page_java Java支持 0-不支持 1-支持
page_flash Flash支持 0-不支持 1-支持
page_client 终端类型 0-其他 1-电脑 2-手机
page_createtime 记录创建时间
page_delflag 删除标记
page_verflag 版本标记
page_sourtraffic 0-其他 1-直接流量 2-推荐网站 3-搜索引擎 4-Email来源
page_visitid 访问ID(用来区分第几次访问的)
page_sourdomain 来路域名 (通过什么域名过来的)
page_soururl 来路页面(通过什么页面过来的)
page_uniquepv 唯一浏览量 (1-唯一 0-是重复的刷新)
page_prevpage 上一页
page_nextpage 下一页
page_enterflag 进入标记(1-是 0-否 是否是入口页面)
page_exitflag 退出标记(1-是 0-否 是否是退出页面)
page_jumpflag 跳出标记(1-是 0-否 是否是跳出页面)
page_browsername 浏览器名称
page_osname 操作系统名称
page_searchname 搜索引擎名称
page_areaid 地区ID
page_areaname 地区名称
<一>、统计数据的计算公式和示例
制造的数据都是符合业务要求的,假设现在只统计一天内网站ID为1的网站A,所有的统计都要加上共同的条件:网站ID=1 的过滤
中间表的字段数:205(所有中间表需要统计的字段数量)
基础表的数据量:1000W
统计模块:目前只统计流量统计模块的
1、流量统计模块(统计可聚合为1条记录)
1.1. 流量分析
网站浏览量:page_id的记录数和
网站独立访客:page_identfiy不重复值的记录数和
网站IP数:page_ip不重复值的记录数和
网站访问次数:page_visitid不重复值的记录数和
网站人均浏览量:公式= 网站浏览量/网站独立访客
网站平均浏览量:公式= 网站浏览量/网站访问次数
网站唯一浏览量:公式= 网站浏览量/page_unique值为1的记录数和
网站非跳出浏览量:公式= 网站浏览量/page_jumpflag值为0的记录数和
网站平均访问时长:公式= 网站的总访问时长(page_visitseconds的累加)/网站访问次数
网站跳出率:公式= 只访问了一个页面的访问次数(page_jumpflag为1的不重复page_visitid记录数和)/网站访问次数 * 100%
1.2. 流量来源分析
流量来源分类:page_sourtype不重复值的记录数和
不同分类浏览量:page_sourtype不重复值的记录数和
不同分类独立访客:每种page_sourtype对应的不重复page_visitor记录数和
不同分类IP数:每种page_sourtype对应的不重复page_ip记录数和
不同分类访问次数:每种page_sourtype对应的不重复page_visitid记录数和
不同分类访问次数百分比:公式= 不同分类访问次数/网站访问次数(不重复page_visitid记录数和)* 100%
不同分类平均浏览量:公式= 不同分类浏览量/网站浏览量(page_id记录数和)* 100%
不同分类访问时长:每种page_sourtype对应的page_visitseconds累加和
不同分类平均访问时长:公式= 不同分类访问时长/网站访问时长(page_visitseconds累加和)
不同分类跳出率:公式= 不同分类
1.3. 来路域名分析
来路域名:不重复的page_sourdomain
来路域名浏览量:每个不同的page_sourdomain对应的记录数和
来路域名独立访客:每个不同的page_sourdomain对应的不重复page_visitor记录数和
来路域名IP数:每个不同的page_sourdomain对应的不重复page_ip记录数和
来路域名访问次数:每个不同的page_sourdomain对应的不重复page_visitid记录数和
1.4. 来路页面分析
来路页面:不重复的page_soururl
来路页面浏览量:每个不同的page_soururl对应的记录数和
来路页面独立访客:每个不同的page_sourdourl对应的不重复page_visitor记录数和
来路页面IP数:每个不同的page_sourdourl对应的不重复page_ip记录数和
来路页面访问次数:每个不同的page_soururl对应的不重复page_visitid记录数和
问题:
1、这目前只是对流量统计模块的所有统计字段进行统计,这个SQL怎么去写
2、一共有3W个网站(虽然现在公司的资源是6000网站,但是说考虑到增长,3W个网站),这是对一个网站统计聚合出一条记录,3W个网站那就是
3W条记录
3、上面的流量统计是聚合为一条记录的,但是访客环境统计就不是一条记录,多条记录
比如:按分辨率来统计,对于网站ID为1的网站统计,就会出现多种分辨率的情况,那就是多条记录
这样的情况怎么和聚合为一条的结合
是不是单独再统计,但这样就会多次查询,貌似会影响性能
4、中间表的策略:我目前是30分钟统计一次,然后记录都是插入,如果要取统计结果,就取时间最晚的一条记录(创建时间)
是这样的策略好呢,还是每一次统计,就把之前的那条统计记录给删除掉,这样一个网站一天就保持一条记录
这样哪种的效率更好呢?
5、分区按天分区,一年365天,我表空间不可能设置为几百个,怎么样平均将分区分配到各个表空间呢(分区我理解的就是分到各个表空间,分担
IO压力)
6、用不用按照网站ID来配合分区呢,3W个网站
7、开发组提到说要分表,说在分区的基础上,每个月再分张表出来,这样性能能好吗? |
|