漫谈统计的那些事儿--一年多来的工作感悟

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huangqing510/article/details/81566741

近一年多来,很多时候似乎都没有一种很想去写点什么的冲动,进入公司以后一直在做统计相关的开发工作,包括一些产品的研发,但更多的是业务上的支持。工程上报bug,找原因,解决bug竟也过去这么久。这期间支持过若干个项目,经历了公司项目管理平台的更改,从ant+svn到git+maven等开发模式的转变,liquidbase的使用等等。虽有一些收获,但是似乎有亮点的屈指可数。

先从公司的整个架构来说吧,前端主要还是SPA(knockout+requirejs+argularjs),可能也用到了vue,但我还没有接触到,以及一些前端的插件,后端主要是springmvc,以及一些导出的插件,工作流插件,计时插件,数据库方面主要是mysql或者oracle,redis用来做缓存,对于海量的数据可能加了一层echache的缓存。初期的时候公司对于业务统计都是放在一个库中,这样就导致表特别多和复杂,后来逐渐分库了,分成了统计库和业务库,再后来又进一步做了主从分离,应该说还是在逐渐的完善吧。对于业务库到统计库的数据传递用的是python,通过pyhton将基础数据及一些指标采集到统计库当中。

从整体的应用方面,系统都是可配置的,这样减少了很多代码的冗余,复用率比较高。从目前系统运行的情况来看,虽然采用了一主三从的架构,但在实际的部署使用过程中会出现各种各样的问题,有时候系统上线紧张,就如同鸡肋。一主三从会带来session混乱的问题,对于统计中一些需要人员过滤的统计极易造成统计结果不准。然后从项目的长期维护方面来说,很多时候一些简单的问题的原因应该测试首先找出来,这样研发可以根据测试反馈的结果直击要害,减少了研发进一步去排查问题找问题的原因,从这方面来说机制不够健全。其次,从系统的部署方面来说,虽然现在有了一键部署的工具,但是对于一些大项目,还是需要研发和测试、工程熬夜去解决,有时可能短时间还找不到问题的原因,从这个方面来说,在项目的可扩展性、复用性、灵活性方面来说还是不够。在项目的长期维护方面,缺少了一些必要文档的维护,比如数据库表字段的说明,bug修复记录,需求开发记录,这样就导致后期接手的人短时间内比较难以接手,可能需要去花较多的时间去研究别人写的代码(有时可能代码里面注释都很少)。最后,觉得在对项目的技术、架构等方面都缺少更深入的了解。

从统计方面来说,统计结果基本上是对整个系统使用情况的最直观的表现,用户也比较关心以下几个问题:1、统计指标准不准;2、所提供的统计能否满足用户的要求(统计指标是否全面,统计结果是否全面);3、统计速度快不快;4、统计表现形式是否丰富(表格、折线图、饼状图等);5、统计功能(比如能否自动生成一些日报、月报、年报)等。用户所使用的系统就像是一颗大脑,内部细节由我们设计,在外则通过网线与海量的设备进行连接。以上用户所关注的问题随着我们技术的成熟有些得到了很好的解决,有些还亟待解决。比如在统计结果的理解上,还需要努力,一方面需要对标准指标理解较深,另一方面有时也要能理解用户想要统计什么指标,想要什么统计结果,还能反过来帮助他们理解这些统计,最终保证数据的正确性。

最开始做统计之前,没有接触到python,到现在从一个小白到慢慢能够写一些不是很复杂的程序,有所进步,但是常常感觉到还不够。python能够比较方面的在两个库直接传递数据,同时又有着丰富的数据处理功能。但似乎我们的采集离一个比较稳定、可靠的采集还差那么一点点距离。有时你第二天早上一起来,可能就发现,昨天运行的好好的采集停了,此时的原因可能是数据库连接断了、程序阻塞了等等,这方面有待我们去完善和解决。

在数据展示方面,目前用了highchart和echart,能够做一些简单的展示,但是说不上十分的丰富,而且数据量大的时候可能还存在排版等前端的问题,但是由于前端研发又比较少,有时候就不得不自己改,这个时候就极易的留下bug。另外一个问题就是,系统不应该只能统计到实时的统计结果,更应该反过来能服务于现实的实际生活中,能够有一些预警、预测等功能,真正能做到智慧这个高度,这个可能需要后续研发的智慧,比如算法、AI等,相信以后能有一个全景化的展示。统计速度方面,现在的统计已经不慢了,加上一些缓存技术以及不断更新的数据库技术,存储系统的改进、硬件系统的改进,memsql,MongoDB等技术的使用,分布式系统、云计算的使用等等。

从更高的层次上来讲,在数据的安全性和容灾备份方面,还有着极大的改进空间,包括分库后基础信息的同步机制等等,就像我们常常所说一旦删库跑路了怎么办。从架构上来说,公司的架构十分适合像springcloud转变,以微服务的形式应用到不仅仅是桌面端,还包括移动端,比如app、微信、浏览器等多种多样的方式。

做统计的日子,有时感觉到面对着冷冰冰的数字,只感到枯燥和烦躁,对于写sql这件事来说还是有比较大的提升。

于平凡处能发现不平凡,于绿叶间的能窥见这世间的美好,虽说不上伟大却愈见成熟,这也许就是成长吧。

虽然一直在做统计,但是这个过程中也多多少少看了一些书,有一些知识要点:

1、设计模式+java编程思想+重构(最近在看这几本书的时候,总是会互相涉及感觉这部分可能需要继续咀嚼几遍)

2、jvm深入浅出+java8特性的了解(作为只是储备)

3、对python更加深入的了解,多线程与多进程,丰富的python类库,人工智能方面的应用(在我看来python应用于人工智能,主要还是统计和数据处理,然后再加上算法),还有爬虫方面的一些应用

4、对前端的一些学习,比如node,vue等

5、应用框架的一些学习,比如docker,Kafka,spring boot,netty,nginx等等

6、非关系数据库的学习,比如redis、mongodb

7、传统数据库的性能问题,日志、内存等

零零散散一些小知识的汇总:

1、volatile、synchronized的使用与区别

2、hashmap、hashtable等的区别

3、线程安全的高并发的加减乘除atmoticinteger,java提供大数类

4、timeunit、blockqueue、executor与threadpoolexecutor

5、java提供的线程安全的concurrent类

猜你喜欢

转载自blog.csdn.net/huangqing510/article/details/81566741