三种东西从来不应该放到数据库中

图片、文件、二进制数据

数据库提供了对BLOB类型的支持,那把文件塞到BLOB类型里面就一定是正确的?这是不对的!毕竟,在许多数据库语言中处理大字段都不是很容易。

把文件保存在数据库中会有一些难题:

·   数据库的读/写速度总是比不上文件系统

·   数据库的备份越来越大,并且会消耗大量时间

·   对文件的访问需要穿越应用层与数据库层

后两点是真正的杀手!在数据库中保存缩略图?很好!但是,你将不能使用nginx或其他的轻量级web服务器来优化它们了!

给自己行个方便,在数据库里只简单的存放一个磁盘上你的文件的相对路径,或者使用S3CDN之类的服务。

短生命周期数据

使用情况统计数据,测量数据,GPS定位数据,session数据,任何只是短时间内对你有用,或经常变化的数据。如果你发现自己正在使用定时任务从某个表里删除有效期只有一小时,一天或数周的数据,那说明你没有找对正确的做事情的方法。

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

扫描二维码关注公众号,回复: 1356984 查看本文章

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

日志

把日志数据存放到数据库里,表面上看起来似乎不错,而且将来也许我需要对这些数据进行复杂的查询,这样的话得到人们认可。这样做并不是一个特别差的做法,但如果你把日志数据和你的产品数据存放到一个数据库里就非常不好了。

也许你的日志记录做的很保守,每次web请求只产生一条日志。对于整个网站的每个事件来说,这仍然会产生大量的数据库插入操作,争夺你用户需要的数据库资源。如果你的日志级别设置为verbosedebug,那等着看你的数据库着火吧。

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

可是稍等一下,你是那片不一样的雪花,你遇到的问题会如此的不同,所以,如果你把上面提到的三种东西中的某一种放到了数据库里也不会有问题。不,你错了,不,你不特殊。相信我!

 

原文出处:http://www.revsys.com/blog/2012/may/01/three-things-you-should-never-put-your-database/

猜你喜欢

转载自hbxflihua.iteye.com/blog/1661993