避免将三种东西并入数据库


改进系统?如何改进呢?

那么要改进你的系统最好的方法就是避免先做“蠢事”这里亲们要理解,不是说你的或者你开发的东西“蠢”,而是有些细节容易被人们忽略掉他暗含的牵连,认识不到的话,这样做对系统维护尤其是系统升级只会带来更多的麻烦。

数据库

第一种,图片、文件、二进制数据。

很多数据库都支持blob类型的数据,那么我们就可以把文件硬塞进去就好了吗?大错特错,先不说这个,在很多数据库的语言里,大部分处理字段都是很不容易的,把文件之间存放在数据库里面,第一点,对数据库的读/写的速度永远都赶不上文件系统处理的速度;第二点,数据库备份变的巨大,越来越耗时间;第三点,对文件的访问需要穿越你的应用层和数据库层。

这后面两个才是终极boss杀手,把图片缩略图存到数据库里面?very good,那你就不能使用nginx或者其他类型的服务器来处理他们了哦~~

所以给自己图个方便吧,就是在数据库里面只简单的存放一个你磁盘上和你文件的相对路径,或者用S3或者cdn之类的服务。

第二种,短生命期数据。

使用情况统计数据,测量数据,GPS定位数据,session数据,任何只是短时间内对你有用,或经常变化的数据。

如果你发现自己正在使用定时任务从某个表里删除有效期只有一小时,一天或数周的数据,那说明你没有找对正确的做事情的方法。

使用redis, statsd/graphite, Riak,它们都是干这种事情更合适的工具。这建议也适用于对于收集那些短生命期的数据。

当然,用挖土机在后花园里种土豆也是可行的,但相比起从储物间里拿出一把铲子,你预约一台挖土机、等它赶到你的园子里挖坑,这显然更慢。你要选择合适的工具来处理手头上的事。

第三种,日志文件。

把日志数据存放到数据库里,表面上看起来似乎不错,而且“将来也许我需要对这些数据进行复杂的查询”,这样的话很得人心。

虽然这样做不是一个很差的方法,但是也绝对不是一个聪明人做的方法,一样道理,你把日志数据和你的产品数据存放到一个数据库里面,到时你就真的会累觉不爱了。

也许你的日志记录做的很保守,每次web请求只产生一条日志。对于整个网站的每个事件来说,这仍然会产生大量的数据库插入操作,争夺你用户需要的数据库资源。

如果你的日志级别设置为verbose或debug,那等着看你的数据库着火吧。

你应该使用一些比如Splunk Loggly或纯文本文件来存放你的日志数据。这样去查看它们也许会不方便,但这样的时候不多,甚至有时候你需要写出一些代码来分析出你想要的答案,但总的来说是值得的。

以上就是人们会忽略掉的三种东西~希望能给亲们一点帮助。