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

需求实现

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

参考文章

http://www.cnblogs.com/huangxincheng/archive/2012/02/21/2361205.html

http://api.highcharts.com/highcharts

http://docs.mongodb.org/ecosystem/drivers/php/

http://v3.bootcss.com/

statpot:使用mongo+bootstrap+highcharts做统计报表的更多相关文章

  1. 说出来你可能不信,我用excel就能做一张高端的统计报表

    统计报表是指各级企事业.行政单位按规定的表格形式.内容.时间要求报送程序,自上而下统一布置,提供统计资料的一种统计调查方式.统计报表具有来源可靠.回收率高.方式灵活等特点,是各个基层企业或事业单位填报 ...

  2. ASP.NET MVC搭建项目后台UI框架—7、统计报表

    ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NET M ...

  3. Bootstrap-table使用footerFormatter做统计列

    写在前面: 在做表格的时候,难免会碰到做统计的时候.由于在项目中涉及到做统计的功能比较简单,之后也就没有过多的去研究更复杂的,这里简单记录下. 这次就直接先上图:一个简单的例子 看到效果图还是很好的, ...

  4. 一个统计报表sql问题

    今天朋友问我了一个统计报表的sql问题.我弄了好久.终于算是写出来了.这里记录下. 问题:  id--------------name--------------addtime1            ...

  5. 在VS2012后的版本中做数据报表时,提示尚未指定报表“Report1”的报表定义

    有一群的朋友在用VS2012做数据报表时,老是提示 本地报表处理期间出错. 尚未指定报表“Report1”的报表定义 未将对象引用设置到对象的实例. 我看了一下,步骤没错,我用VS2010做了一下,一 ...

  6. 用SQL实现统计报表中的"小计"与"合计"的方法详解

    本篇文章是对使用SQL实现统计报表中的"小计"与"合计"的方法进行了详细的分析介绍,需要的朋友参考下   客户提出需求,针对某一列分组加上小计,合计汇总.网上找 ...

  7. 水晶报表使用经验谈--使用sql语句直接生成dataset做为报表的数据源

    概述: 上一次自己做了直接在rpt文件里使用oledb连接使用数据库的方法 但是不是很灵活 这次做了使用sql语句直接生成dataset做为报表的数据源(即push模式),这样就可以接受参数了.当然报 ...

  8. 读取同一文件夹下多个txt文件中的特定内容并做统计

    读取同一文件夹下多个txt文件中的特定内容并做统计 有网友在问,C#读取同一文件夹下多个txt文件中的特定内容,并把各个文本的数据做统计. 昨晚Insus.NET抽上些少时间,来实现此问题,加强自身的 ...

  9. 考勤输入导入OA平台与考勤统计报表导出功能源代码

    注:以某某公司为例,每日签到时间为8点整   每日签退时间为17点30分 规则:公司签到签退时间在OA平台中可以视实际情况调整,当天有请假并通过工作流审批通过为有效,当天因公外出并通过工作流审批通过为 ...

随机推荐

  1. vim 多行注释消除注释,多行删除

    进入可视化模式: Ctrl+v 继续进入编辑模式: shift+i 注释: shift+# 注释生效: ESC 取消注释 d 删除 选中全部字符块区域,使用方向键上下右: 然后,按一下d

  2. Android开发:第四日番外——Assets文件夹和RAW文件夹区别

    话说上回说到SQLite数据库,其中涉及到把已经设计好的数据库打包到APK中,提到可以放置在Assert文件夹或者RAW文件夹中,那么两者到底有什么区别呢?让我们来探究一下. 一.res/raw和as ...

  3. 不停止MySQL服务增加从库的两种方式

    不停止MySQL服务增加从库的两种方式 转载自:http://lizhenliang.blog.51cto.com/7876557/1669829 现在生产环境MySQL数据库是一主一从,由于业务量访 ...

  4. Navi.Soft30.框架.WebMVC.开发手册

    1概述 1.1应用场景 互联网高速发展,互联网软件也随之越来越多,Web程序越来越被广泛使用.它部署简单,维护方便,深得众多软件公司使用 Bootstrap前端框架,是最近非常流行的框架之一.它简洁, ...

  5. OsmocomBB && Motorora C118

    OsmocomBB 编译安装: http://www.cnblogs.com/hangxin1940/p/3375216.html ##准备: C118 ![C118](http://images.c ...

  6. 菜鸟教程之工具使用(十二)——Eclipse突出显示选中的相同变量

    大家都知道在Eclipse中,选中一个变量或者方法名(或者说是一个单词),当前文件中跟他一样的变量会被突出显示,这个功能很好用.能让我们很方便的找到该变量在哪被用到了.前段时间我的Eclipse的这个 ...

  7. SQL Server への接続を許可するファイアーウォール設定

    netsh advfirewall firewall add rule name="SQL Server Browser" protocol=UDP dir=in localpor ...

  8. 删除.gitignore中的在version control中的文件

    如果有一个文件例如xyz在版本控制系统中,然后你发现这个文件不应该提交到git上,所以加了.gitignore文件并将其加入其中,但是git不会自动讲其从版本库中移除它.如果你只有一个文件,你可以使用 ...

  9. VC 2010的重大变化

    auto 关键字具有新的默认含义.由于使用旧含义的情况很少见,因此大多数应用程序都不会受此更改影响. 引入了新的 static_assert 关键字,如果代码中已经存在具有某个名称的标识符,则此关键字 ...

  10. 查看macbook是多少位

    Prince-2:~ snowinmay$ uname -aDarwin Prince-2.local 12.5.0 Darwin Kernel Version 12.5.0: Sun Sep 29 ...