最近做了一个统计项目,这个统计项目大致的需求是统计接口的访问速度。客户端会调用一个接口来记录接口的访问情况,我的需求就需要分析这些数据,然后做出个统计报表。

需求实现

最初的时候想着每天把这些接口访问情况的信息存储到mysql中,然后根据这些访问情况做个分析再做报表。然后第一个问题就来了,信息包含太多字段了,如果我将每个信息解析成mysql表的一个字段,那么这个字段很长,而且还有一个致命缺陷,不容易扩展。如果将所有字段都存储为一个json,然后存储到text字段呢,又没法建立索引了。所以这种情况,最适合搬出mongo来了。

相比于mysql,mongo的好处就是扩展性好,灵活。像统计数据这样很容易需求不确定的数据确实是个很好的选择。我另外想想还有个好处就是不用的数据我可以很方便地将数据json化,然后存为文件。然后在需要的时候,也很容易读取直接放入到mongo中去。比如我可以将一个月的数据做一个持久备份之类的操作。

接着是生成统计报表的部分。各种图是很需要的,由于是给内部做统计报表,不需要兼顾各种浏览器。所以我选择了强大的highCharts。highCharts是一个JS图表库。很方便的就可以生成图表了。亲身体会是这个比flash做图表开发时间缩短多了。你可以从http://www.highcharts.com/上下载3.0版本。

后续呢,由于后面有很多统计变化的需求。每次都写一个过程来生成js代码从而渲染统计报表也是个很繁琐的事情。于是我就打算写一个工具,大致的思路就是依靠修改配置文件就可以直接生成统计报表,报表的页面为了美观我引入了bootstrap 3.0。于是发现这种数据存储mongo,加上配置文件生成报表的模式是很容易实现,也确实很好使用。甚至于你在mongo中增加了一种统计结构,我可以什么都不用修改,只需要增加一个配置项就可以生成新统计结构的图表了,这大都是归功于mongo的json结构化。

statpot工具

这个工具statpot开源在github上了:

https://github.com/jianfengye/statpot

可以下载result/stat_20130925.html来看生成的报表。

生成的报表如下:

现在是实现了两种:饼图和柱状图。后续有可能的话还会继续加上一些其他统计图表。

还能想到的一个问题是这个页面如果是动态的,那么必然实时分析需要的时间比较多,而统计报表一般不需要动态的,所以完全可以做成生成静态文件的方式,于是web/目录下就有动态和静态的入口。这种生成静态报表然后存储的方式也是很好的,比如每天我生成一次动态报表,然后就把mongo中的数据清空或这静态文件化。

当然后来想想,这种唯配置至上的工具唯一的弊端是配置本身就是一种学习成本,你需要花时间来掌握这个配置。但是这个问题在我看来,和代码一样,应该由配置的语义来解决。

问题记录

记录下开发过程中特别是使用mongo中遇到的问题:

如何获取一个字段的所有可能的值

使用distinct

如何获取一个字段的所有可能的值,并且计算出每个值有多少个条目

需要使用group命令

group的命令文档在:http://docs.mongodb.org/manual/reference/method/db.collection.group/

> db.feedbacks.group({

"key" : {"keys.properties.network_type": true},

"initial":{"count":0}, 
     "$reduce":function(cur,prev){

prev.count=prev.count+1;

}

})

对应的PHP mongo的API是:http://www.php.net/manual/zh/mongocollection.group.php

statpot:使用mongo+bootstrap+highcharts做统计报表相关推荐

  1. 使用正确的报表软件做统计,帮助企业提高统计报表的质量

    统计工作对于一个企业而言是很重要的,它不仅是实现企业科学化管理的主要手段,还是企业在决策过程中的重要依据,同时还是一个企业衡量市场做出判断的标准,所以统计年终报表是有多么的重要.但是统计年终报表比较复 ...

  2. 使用highcharts做地图统计

    最近在做统计数据,用到highcharts做统计地图,以及地图的下钻,百度了一些案例,在此做一些总结,方便自己知识储备. 开始:首先需要引入:hightcharts.js,map.js(地图相关),d ...

  3. java统计报表,导出excel,自定义存储目录

    java统计报表,导出excle,自定义存储目录 做一个将查询出来的数据写入excel,并且点击导出按钮是,可以选择导出路径 **直接上完整代码 1.utils工具类,里面可以自己设置样式,详细看注释 ...

  4. 统计报表指的是什么?有什么专业的报表制作软件?

    统计报表是管理者获取基本统计信息和了解基本发展情况的重要手段.一份看似简单的统计报表,其实操作起来并没有那么简单. 统计报表的定义是什么? 统计报表是按国家统一规定的表式,统一的指标项目,统一的报送时 ...

  5. 统计报表的测试方法和策略

    之前论坛讨论的关于统计报表方面 测试 的策略,以前做过类似的测试模块,如 日志 检索(先构造各种数据,在验证数据的准确性以及页面展示等等):这里mark一下,以便以后使用查看: 报表测试主要分为:报表 ...

  6. 软件测试报表统计,排行榜Top4的统计报表软件测评

    阅读提示: 文章中与FineReport软件使用的相关内容,基于软件的V7.0旧版本编写,不代表软件最新的使用方式. FineReport最新版免费试用:https://www.finereport. ...

  7. 多级报表 php,电力设备生产数据的多层分组统计报表实现

    [导读]欢迎大家持续关注葡萄城控件技术团队博客,更多更好的原创文章尽在这里~~多层分组统计报表即按照不同的数据字段,形成多级分组,并分层级进行合计. 多层分组统计报表即按照不同的数据字段,形成多级分组 ...

  8. 使用Jaspersoft Studio制作JasperReport报表(三)简单的学生分数统计报表

    前面介绍了新建一个报表的基本流程和报表工具的基本使用,现在就不啰嗦了,直接来个简单的报表实战一下 数据准备 1.数据库数据源准备:新建student数据库表,数据包括id,班级,生日,分数,姓名字段, ...

  9. python实战|利用openpyxl制作订单统计报表

    刚开始学习openpyxl,试下利用openpyxl制作平时常用的统计报表,发现功能还是挺实用的,对包不熟悉,代码应该还有很多优化的空间,好几个循环都应该可以优化下,增加可读性~  最终试验做成的报表 ...

最新文章

  1. struts2的OGNL表达式(二)
  2. OpenCV基本线性变换轨迹栏的实例(附完整代码)
  3. 使用Dynamic LINQ实现Ext Grid的远程排序
  4. Linux LED驱动源码简析
  5. 获取IP地址和MAC地址
  6. windows7系统做文件服务器拒绝,Win7提示qq服务器拒绝了您发送离线文件
  7. 打印1-100内的素数
  8. App引导页学习进阶临摹模板|UI界面设计步骤
  9. 《微处理器体系结构》1.1 汇编语言与机器语言及应用
  10. 如何爬取猫眼网电影票房数据
  11. 【Django】第一课 基于Django图书借阅管理网站平台
  12. linux下如何查看hdmi设备,如何在Linux中设置HDMI数字播放 | MOS86
  13. 愿天下有情人都是失散多年的兄妹 (25分)
  14. ksoftirqd内核线程-处理软中断
  15. Python海龟绘图,画花朵
  16. 大数据下的90后事业画像
  17. 教你十秒钟学会剪映抠绿幕
  18. php mysql难不难_一家之言的经验之谈php+mysql扎实个人基本功
  19. P2P穿透及TURN转发简要说明
  20. 我校梁昌洪教授的“糊涂诗”

热门文章

  1. 响应式网页的布局设计
  2. SDN:软件定义网络
  3. Nacos v0.7.0:对接CMDB,实现基于标签的服务发现能力
  4. sudo提权实战讲解 对用户对组的权限配置分析
  5. python 使用pymssql连接sql server数据库
  6. mongoose笔记
  7. JSP显示页面和数据库乱码
  8. Pyhton 操作MySQL数据库
  9. SuperMap iDesktop Cross 8C 开源桌面GIS下载与扩展开发
  10. 解决Debian-7.1下Chrome浏览器字体难看的问题