标签归档:数据库

数据整理的方式

最近做项目遇到这样一个数据库问题:在后台查询里面需要实时查询到用户动作统计,比如多少用户访问了当前页面,多少用户分享了当前页面,在页面上停留了多少时间等。我开始设计数据库的时候,只设计了一个『动作』表,里面有详细的动作分类与动作时间,只要有了数据,后面的查询是比较容易的事情。

但是我错了,错误的原因是数据量非常的庞大,然后后台每执行一次查询要耗费10S以上,占用大量CPU时间,对前台用户访问也会造成问题。于是我武断的把后台的查询设定为非实时,即每天跑一次数据,导出一次报表

但用户不接受,所一定要实时的看到数据,我解释了原因,并且说并没有做实时的统计,如果非要实时查看对整个系统都会有影响,会影响到用户的体验,但客户坚持说一定要看到实时的统计。

其实我知道还有一种实时的统计方式,即将统计的数据设计成冗余字段,在记录用户访问动作的时候,将这些数据加总。但这样我总是会担心出现数据不一致的问题,因为『动作』表里面记录是准确的,但数据表里面可能由于网络访问,程序异常等原因加总不能与『动作』匹配,但无奈用户坚持这样的要求,我只好这样做

这样做的效果却出奇的好,因为计算的时间平均分配到了每个用户的头上,不会每次做批量计算对CPU压力,而且最关键的是客户可以实时检测到用户的数据了!

针对以上,同样可以用到我对『印象笔记』的整理上来。我原来的想法是心可能多的收集资料,然后找一个时间把这些资料分门别类的整理起来。但后来一直没有找到这个时间,所以『印象笔记』里面现在是一团糟的状态!

于是我现在就想,如果我每次找到灵感的时候,稍微做一下归类或者设置一个标签,就会让笔记非常的容易查找!就像我当年使用Google Note做归类一样,当时的归类让我几年后遇到问题还会想到里面记录的东西,好找与不好找差别确实非常的大!

这就是,把一件可能非常耗费时间的事情平均分配到每次里面,所做的工作非常少,但得到的效果却是非常好。以前是全部塞进去,再次用到这个资料的时候我基本上还是去Google,因为没有分类,我不知道要在哪里去找。但如果已经做了分类,查找进来就非常方便了,比如我要查找mysql的知识,只需要找到这个目录,搜索关键字就可以了!再说现在每个目录的数据非常少,基本浏览一下就能找到自己需要的信息了。另外平时在没事的时候,还可以复习里面的知识,把东西记住就会在写代码的时候节省很多的时间!

Oracle学习

 

oracle university接触oracle已经好长时间了,始终没有系统的学习过,只局限于在工作中写一些开发代码,建一些存储过程而已。这次有机会去Oracle University培训还得益于有一们同事的离职,不然怕也到不了我。学习的过程是紧张而有序的,整个过程正好适当,这个适当的含义是它既不太容易,容易到自己一看就会,不屑于去学习;也不太难,难到完全听不懂;恰到好处的一个点会更容易激发人的积极性。12月5号到16号,共去了两周。分为两个老师上课,第一个叫童廉进,第二个叫唐涛;两个各有特点,童是一个比较老实的人,他会想把所有知道的东西都告诉你,然后下课让你认认真真的做QUIZ,实验也会安排你去做。但他却不太善于把握时间,总是该下课的时候才讲了一半,一看时间来不及了,只好压缩我们的实验时间,其实他也是太想把知道的内容灌输给我们了,但结果是我们在一堂课下来能够吸收的更少罢了;而唐是另外的一种人,他总是把教材上的东西一提而过,取代的是自己新手实践;实践完毕后直接告诉你,教材上就是刚才他所实践的东西。进度飞快,每堂课基本上不超过半小时。这样的好处是,我们有更多自由的时间吸收他上课讲的那些精华的东西,也有时间休息一下我们的大脑来接收下一堂课要学的内容;些触发器罢了;在万达的时候,每隔一段时间就会有数据库培训的相关内容,但时间毕竟太短——少的时候半天,多的时候才一天。

从课程上来说,oracle的使用并不复杂,但为什么课程却设置了这么多奇奇怪怪的东西呢?第一门课是理论知道,这一部分还是有必要的,可以供你了解oracle的内部结构,第二门课主要讲述了一些高级应用,但在我看来,高级应用主要是讲数据的备份与恢复,无论从哪个层面上的备份(表空间,或者数据库),最主要的目的是怎么样使你的数据库高效安全的运行,如何处理大批量的数据;他给我们讲的一个经典是,背景:一个数据库有全库备份,然后把控制文件,日志文件,数据文件等都删掉了,怎么样从那个全库备份中恢复过来;可能你会想,这个很容易啊,你已经做了全库备份了,怎么会不能恢复过来呢?但问题是如果你知道oracle有时间点限制怕你就不再这么乐观了;数据库的恢复分为完全恢复和不完全恢复,这种情况下,就只能进行不完全恢复。但不完全恢复也有一个一致点的概念,就是日志文件头跟数据文件头跟控制文件头要一致,数据库才会启动,这三样缺一不可,这样的话,即使你把原来的全库备份拿过来了,也不一定能够找到这样一个一致点进行恢复,而不能恢复造成的结果很可能就是整个数据库不能再启动了。这个是他说的最麻烦的一个事例,但后面想一想也没那么的复杂,即使整个数据库都启不来了,我还可以把备份文件导出到一个新建的数据库中,这样也可以恢复到一个时间点;

这次的学习还第一次让我接触到了RMAN,让我意识到,英文上课是多么痛苦的一件事情。但上课的时光也是很开心的,可以接触到不一样的人,不一样的环境,思考更多不一样的事情。比如我们见到的一个台湾人,就跟我们讲了一些台湾与大陆生活习惯上的差别,在我们紧张学习中增添了乐趣【完】