这段时间陆续把过往一两年的工作经历都写出来,今天写曾经对我挑战比较大的一个 --- 自建网站分析系统。也是一年多前的事儿了。
要说是自建,其实也不完全是,毕竟利用了开源WA工具Piwik。Piwik是MySQL+PHP架构的网站分析工具,类似于Google Analytics,但是它的界面,功能太。。。不好用了,而且有些指标计算好像也有问题。不过,它从JS标签收集数据到把数据发送到服务器处理后写到MySQL数据库里的部分,还是很不错的。
我们要做的部分,是把mysql的表先进行处理,处理成需要的数据,再展现到界面上。
技术栈
先说下技术栈。其实这部分也纠结很久,毕竟,我连专业的开发都不是,更别说怎么搞技术架构。开始想的很天真,用SQL把数据提出来,并且存成想要的表。后来就成了这样:每段SQL长达好几行,并且各种join,各种concat,各种group by,还有字段的各种运算,这也就算了,问题是,SQL数据运算的效率和支持量级都不行,于是最后改成了这样:后端部分: 先用python把数据提出来,pandas处理后,形成几张大表,以mongoDB的形式存入,再用pandas取出mongodb的表,处理成需要展现的数据的API。这样的好处是,以后提取数据都可以只从mongoDB中来,从而不会动到原始的mysql数据源。
想着后端用了python,界面也用python吧,毕竟python有数据可视化库,并且几个web框架也不错,可以有自带的登录,比如django,flask等。这样,这套网站分析系统又成了MVC模式。。。后来,界面部分改用了VueJS,也就是说,无论是数据改变,用户交互,渲染都在前端,而后端的python,只需要做到JSON API就可以了,整个架构也就变成了RESTful API+mvvm。其实这部分本不需要这么纠结,因为只要当时多看看类似工具,比如某io,就可以看到 json都写到了html 里。。。
前后端分离
我自己开发就是前后端分开做的,写前端的时候,数据接口都是用的 mock data,前端开发的差不多了,再把mock data拿下来,以此作为后端需要的JSON格式,开发接口。最后是前后端再调试。所以大概可以想到,在企业内部也是这样进行,前端后端各干各的,最后联调。
功能规划
其实功能很简单,说是为了易用性,其实我自己觉得很大一部分原因是受开发能力所累,毕竟一个新手,做第一个项目,很多东西实现不出来的功能,就不会去做。不得不实现的,才会去努力研究做。功能上,主要涉及了这些工作:
规划一共需要多少报表,每张报表以什么样的图表展现,都需要哪些字段。(这些决定了至少需要多少个API,每张报表有一个ID,当传这个ID给接口的时候,须返回相应报表的数据)
规划有哪些交互的地方,因为每次交互,都意味着报表数据会在前端重新渲染,需要重新调接口。主要有 报表导航,数据导出,选择日期的datepicker等,datepicker还需要注意的是,需要在前后端都做逻辑判断:起始日期/结束日期缺失,起始日期晚于结束日期 这些情况应该怎么处理。
还有就是一些布局上的规划。
重点和难点
后端的重点就是数据处理:Piwik存入数据库的有十几张表,但是真正用到的也就那么5,6张... visit(主要记录每个访问Session),link visit action (主要记录所有events和pageviews),conversion (记录订单),conversion items(具体的商品信息),goal(目标),action(具体的事件名称以及page的title等),每个表都有些不同的字段,所以要使用pandas 根据需要merge起来,并且计算所需要的字段,这里面其实特别容易出错。
前端相对好很多。主要一个登录的user auth,不过因为vue当时在国内突然火起来了,所以也是参考了别人的代码的,当然这一部分涉及了要新建个用户数据库(顺便膜拜下vuejs的作者尤雨溪,复旦附中毕业后出国的文科生~~~在大杨浦生活了10年的人表示从小就对这所学校十分向往,无奈自己是学渣~~~),另外,前端部分还用了当时还不是那么有名的element UI,也就是类似于bootstrap的一套东西(再给饿了么出品的element打个call,真的很省事,简化了好多工作,导航,datepicker,表格,按钮等都是现成的 ),以及图表库chartjs(其实这类图表库有很多,比如hichart,echart,还有比较高深的淘宝D3等)。
还有一些学到的东西
其实现在想想,Python据说主要用于单纯的数据分析,以科研领域居多,真正的用在软件中的,处理大批量数据的可能会需要分布式的计算引擎,比如这种架构hadoop+java。单纯用python,可能数据量一上来,就不行了。
不过这一次经历还是很棒的,帮助我对很多东西有了更深入的理解。比如网站架构,开发,以及类似Google Analytics这样的数据分析系统原理等。
那段时间也真的是痛并快乐着,那时候周末和平时晚上要去上JS和Java课,同时研究python和vue,每天早起跑步,然后又长了湿疹坐立难安~~但越是这种状态成长的越快,并且养成了一种迷之自信~~~以后工作中很多东西虽然没做过,但是知道只要研究几小时,几天肯定就能上手搞出来,或许这就是在创业公司的好处吧。