`
hbxflihua
  • 浏览: 691481 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

阅读更多

图片、文件、二进制数据

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

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

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

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

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

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

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

短生命周期数据

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

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

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

日志

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

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

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

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

 

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

分享到:
评论

相关推荐

    aws-lambda-redshift-loader, 在AWS中,实现了Amazon数据库加载器.zip

    aws-lambda-redshift-loader, 在AWS中,实现了Amazon数据库加载器 基于zero管理AWS的Amazon红移数据库加载程序使用这个AWS函数,将文件数据放入Amazon红移从来就不容易。 你只需将文件推入 Amazon S3的各种位置,并...

    二十三种设计模式【PDF版】

    的被使用,被调用,而是深刻的介入到一个领域中去,J2EE 等框架软件设计的目的是将一个领域中不变的东西先定义好,比如 整体结构和一些主要职责(如数据库操作 事务跟踪 安全等),剩余的就是变化的东西,针对这个领域...

    JAVA自学之路

    有不少的同学发信给我,和我探讨java的自学过程应该是什么样的,毕竟有很多人因为各种各样的原因不能参加培训。我试着给出自己的见解,抛砖引玉吧。 这个路线图是给那些为了就业的人准备的,如果只是兴趣,不一定照...

    PERL语言编程

    Perl 之所以成为 Perl 是因为它从来不会因为保持简单事情简单化而丢失其他方面的特性。 <br/>因为 Perl 既强大又好用,所以它被广泛地用于日常生活的方方面面,从宇航工程到分子生物学,从数学到语言学,从图形...

    java 面试题 总结

    SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。 对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上...

    实用批量改名.rar

    不放入GDIPLUS.DLL的导致后果便是,如果您的操作系统是WIN98或者WIN2000,并且从来没有安装过GDIPLUS.DLL,软件可能将提示"找不到GDIPLUS.DLL",解决办法是下载并安装《数码照片批量处理V2.2》或《证照速打王V2.3》,...

    Android高级编程--源代码

    6.4 Android中的数据库 175 6.4.1 SQLite简介 175 6.4.2 Cursor和内容值 176 6.4.3 使用Android数据库 177 6.5 内容提供器简介 189 6.5.1 使用内容提供器 190 6.5.2 本地Android内容提供器 192 6.5.3 创建一...

    x-scan-v3.3-cn

    并将结果整理、分析,最后通过Email发送到指定的电子信箱中,因此这是一种比较高级的扫描器,初学者不适合使用。 另外注意载下在扫描器的时候注意压缩报文件的扩展名,如果是tar为扩展名,那么这个扫描器是运行在...

Global site tag (gtag.js) - Google Analytics