三种东西永远不要放到数据库里
图片,文件。二进制数据
既然数据库支持BLOB类型的数据,把文件塞进BLOB字段里一定没有错了!?错,不是这种!别的先不提,在非常多数据库语言里,处理大字段都不是非常easy。
把文件存放在数据库里有非常多问题:
●对数据库的读/写的速度永远都赶不上文件系统处理的速度
●数据库备份变的巨大。越来越耗时间
●对文件的訪问须要穿越你的应用层和数据库层
这后两个是真正的杀手。把图片缩略图存到数据库里?非常好,那你就不能使用nginx或其他类型的轻量级server来处理它们了。
给自己行个方便吧,在数据库里仅仅简单的存放一个磁盘上你的文件的相对路径。或者使用S3或CDN之类的服务。
短生命期数据
使用情况统计数据,測量数据,GPS定位数据,session数据,不论什么仅仅是短时间内对你实用,或常常变化的数据。假设你发现自己正在使用定时任务从某个表里删除有效期仅仅有一小时,一天或数周的数据,那说明你没有找对正确的做事情的方法。使用redis,statsd/graphite, Riak。它们都是干这样的事情更合适的工具。
这建议也适用于对于收集那些短生命期的数据。
当然,用挖土机在后花园里种土豆也是可行的,但相比起从储物间里拿出一把铲子。你预约一台挖土机、等它赶到你的园子里挖坑,这显然更慢。
你要选择合适的工具来处理手头上的事。
日志文件
把日志数据存放到数据库里,表面上看起来似乎不错。并且“将来或许我须要对这些数据进行复杂的查询”。这种话非常得人心。这样做并非一个特别差的做法。但假设你把日志数据和你的产品数据存放到一个数据库里就非常不好了。
或许你的日志记录做的非常保守,每次web请求仅仅产生一条日志。对于整个站点的每一个事件来说,这仍然会产生大量的数据库插入操作,争夺你用户须要的数据库资源。
假设你的日志级别设置为verbose或debug,那等着看你的数据库着火吧。
你应该使用一些比方Splunk Loggly或纯文本文件来存放你的日志数据。这样去查看它们或许会不方便。但这种时候不多,甚至有时候你须要写出一些代码来分析出你想要的答案,但总的来说是值得的。
但是稍等一下,你是那片不一样的雪花,你遇到的问题会如此的不同,所以。假设你把上面提到的三种东西中的某一种放到了数据库里也不会有问题。不,你错了,不,你不特殊。相信我。
译文地址:http://www.revsys.com/blog/2012/may/01/three-things-you-should-never-put-your-database/
相关文章
- 数据库的行式存储 VS 列式存储
- 数据库设计工具介绍
- 配置数据源的三种方式和sql心跳的配置详解数据库
- Oracle中插入特殊字符:&和’的三种方法详解数据库
- 数据库C语言实现Oracle数据库数据导出(Coracle导出)
- 使用SQL Server提升数据库性能的若干语句(sqlserver语句)
- 在 Linux 上检查 MySQL/MariaDB 数据库正常运行时间的三种方法
- MySQL 驱动包: 畅通无阻的数据库连接(mysql的驱动包)
- 快速导出Oracle数据库中的用户表(oracle 导出用户表)
- MySQL数据库的三种范式理解数据库规范化的重要性(mysql中三种范式)
- MySQL数据库三种范式原理简介(mysql 三种范式)
- 解析MySQL数据库的三种同步方式(mysql 三种同步方式)
- 安装Oracle,轻松掌握数据库管理(oracle使用安装)
- 如何获取Oracle 数据库中的下一个ID(oracle 下一个id)
- Oracle数据库三种连接技术简介(oracle三种连接方式)
- Oracle 数据库赋权三种不同方式(oracle三种赋权方式)
- Oracle数据库面向三种实例类型的优化方案(oracle三种实例类型)
- 三种开发Oracle数据库的方法(oracle 三方式)
- PHP调用三种数据库的方法(1)
- 向asp.Net进发数据库连接操作
- C#三种判断数据库中取出的字段值是否为空(NULL)的方法
- 三种东西永远不要放到mysql数据库里