开发者社区> 技术mix呢> 正文

statpot:使用mongo+bootstrap+highcharts做统计报表

简介:
+关注继续查看

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

需求实现

最初的时候想着每天把这些接口访问情况的信息存储到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来看生成的报表。

生成的报表如下:

Image(12)

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

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

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

问题记录

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

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

使用distinct

Image(11)

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

需要使用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




本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/p/3340162.html,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Chart.js-柱状图分析(参数分析+例图)
Chart.js-柱状图分析(参数分析+例图)
27 0
五分钟带你玩转Elasticsearch(二十)es导出时间段内的数据
五分钟带你玩转Elasticsearch(二十)es导出时间段内的数据
393 0
Bootstrap教程(7)--使用表格
本文目录 1. 概述 2. 基本表格 3. 表格样式类 4. 设置表格行、列的样式 5. 响应式表格 6. 小结
96 0
IG-REPORT企业智能报表 基于springboot+vue 轻松实现30s出报表
传统报表方式的弊端 报表是所有企业都必要的分析决策工具,传统的展示报表的方式特别麻烦,还记得两年前我入职的时候,领导让我做一个报表,步骤大概要经历1、数据库中创建一个目的表 存储SQL跑批后的结果 2、开发后端代码 从service到dao层都要开发 还要实现定时调度 3、开发前端代码 htmlcssjqueryajax等这些步骤从技术的角度来看算简单的、但却永远在做重复的事情。
2424 0
Bootstrap Paginator分页插件使用
Bootstrap Paginator 分页插件的实现
19930 0
Bootstrap学习笔记--表格
先来个总体概括: 还有一个响应式表 实践出真知: 类:.table 一个轻的填充物和只有水平分隔符。 看代码: Firstname L...
1192 0
导出导入grafana完整的dashboard(非单个图表)
版权声明:本文可能为博主原创文章,若标明出处可随便转载。 https://blog.
2070 0
最好用的图表工具 -- ECharts
首先比较下目前比较流行的几款图表库: highcharts文档详细易懂,上手快捷,但highcharts依赖于jQuery库,而且Highcharts对个人免费但对企业收费 d3.js更自由些,更容易做出自己想要的效果,但学习起来需要更多的时间 echarts:开源软件,无私的为我们提供漂亮的图形.
8073 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载