我已经在很多演讲里说过,改进你的系统的最好的方法是先避免做“蠢事”。我并不是说你或你开发的东西“蠢”,只是有些决定很容易被人们忽略掉其暗含的牵连,认识不到这样做对系统维护尤其是系统升级带来多大的麻烦。作为一个顾问,像这样的事情我到处都能见到,我还从来没有见过做出这样的决定的人有过好的结果的。

1. 图片,文件,二进制数据

既然数据库支持BLOB类型的数据,把文件塞进BLOB字段里一定没有错了!?错,不是这样的!别的先不提,在很多数据库语言里,处理大字段都不是很容易。
   把文件存放在数据库里有很多问题:

  • 对数据库的读/写的速度永远都赶不上文件系统处理的速度
  • 数据库备份变的巨大,越来越耗时间
  • 对文件的访问需要穿越你的应用层和数据库层

这后两个是真正的杀手。把图片缩略图存到数据库里?很好,那你就不能使用nginx或其它类型的轻量级服务器来处理它们了。
   给自己行个方便吧,在数据库里只简单的存放一个磁盘上你的文件的相对路径,或者使用S3或CDN之类的服务。

2. 短生命期数据

使用情况统计数据,测量数据,GPS定位数据,session数据,任何只是短时间内对你有用,或经常变化的数据。如果你发现自己正在使用定时任务从某个表里删除有效期只有一小时,一天或数周的数据,那说明你没有找对正确的做事情的方法。使用redis,statsd/graphite,Riak,它们都是干这种事情更合适的工具。这建议也适用于对于收集那些短生命期的数据。
   当然,用挖土机在后花园里种土豆也是可行的,但相比起从储物间里拿出一把铲子,你预约一台挖土机、等它赶到你的园子里挖坑,这显然更慢。你要选择合适的工具来处理手头上的事。

3. 日志文件

把日志数据存放到数据库里,表面上看起来似乎不错,而且“将来也许我需要对这些数据进行复杂的查询”,这样的话很得人心。这样做并不是一个特别差的做法,但如果你把日志数据和你的产品数据存放到一个数据库里就非常不好了。
   也许你的日志记录做的很保守,每次web请求只产生一条日志。对于整个网站的每个事件来说,这仍然会产生大量的数据库插入操作,争夺你用户需要的数据库资源。如果你的日志级别设置为verbose或debug,那等着看你的数据库着火吧。
   你应该使用一些比如Splunk Loggly或纯文本文件来存放你的日志数据。这样去查看它们也许会不方便,但这样的时候不多,甚至有时候你需要写出一些代码来分析出你想要的答案,但总的来说是值得的。

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

其实我在一个项目里把log放到了数据库里。当然,不是网站项目。对于第一点和第二点我完全赞同!

三种东西永远不要放到数据库里相关推荐

  1. 三种语句可以恢复Oracle数据库误删除数据

    有很多朋友都遇到过在操作数据库时误删除某些重要数据的情况,如果数据库没有备份而且数据有十分重要的情况下怎么做才能找回误删除的数据呢?我在这里为大家介绍几种误删除数据库中重要数据的恢复方法(不考虑全库备 ...

  2. 准时下班系列_Access合集之第2集—三种方案批量上传图片到数据库,你会几种?

    Hi,各位同学好!我是吴明课堂的答疑老师之一陈婉.2022年到来了,祝大家一切安好! 今天是新年的第一天,在本期的职场应用案例分享之前,我想分享一个真实发生过的故事.(不感兴趣的同学可以直接跳到分隔线 ...

  3. 三种人永远不适合做老板

    穷人有穷人思维我们一点都不奇怪,但我见过很多老板也有穷人思维,这种思维说明一个什么问题?说明不是因为你富有,你的思维就是富人思维:也不是因为你现在贫穷,你的思维就是穷人思维.那么,哪些思维是老板的穷人 ...

  4. java将图片放进mysql中_在java代码中怎么从服务器上把图片拿来放到数据库里

    展开全部 看你用的是么数据库,一般是读取后转e68a84e8a2ad3231313335323631343130323136353331333431346430成二进制blob格式存入数据库的BLOB ...

  5. php实现栏目三种类型,WordPress后台edit-tags.php里无限栏目分类实现

    在 WordPress 里 http://localhost/wordpress3.6.1/wp-admin/edit-tags.php?taxonomy=category 这个链接可以显示 WP 里 ...

  6. python 三种方法实现删除一个列表里的重复元素

    一.python代码 test_list=['张三','李四','王五','张三','1','1','2','2','3','3']#法一:将列表转化为集合输出 test_set=set(test_l ...

  7. 三种场景不建议放在关系型数据库中

    我已经在很多演讲里说过,改进你的系统的最好的方法是先避免做"蠢事".我并不是说你或你开发的东西"蠢",只是有些决定很容易被人们忽略掉其暗含的牵连,认识不到这样做 ...

  8. Oracle数据库关闭的三种方法

    Oracle数据库关闭应该用什么方法呢?下面就教您三种最常用的Oracle数据库关闭的方法,希望对您学习Oracle数据库关闭方面有所启迪. 1.正常关闭 正常关闭数据库所用的选项是normal,数据 ...

  9. oracle灾备同步_浅析Oracle数据库的三种灾备技术

    灾备技术深入比较 这三种技术都实现了数据库的灾难备份,但各有特点,存在以下几方面的不同. 基本原理 Oracle Data Guard 是通过Oracle数据库归档日志来实现的,并且通过Oracle ...

最新文章

  1. android教程 - android ui 介绍,多图详解 “Android UI”设计官方教程
  2. LISP 圆孔标记_lisp使用说明
  3. 01爬虫基本原理及Requests库下载
  4. Android 实现布局动态加载
  5. ESP32的FLASH、NVS、SPIFFS、OTA等存储分布以及启动过程
  6. 什么是工装服_王俊凯穿连体工装亮相跨年晚会,中国风满满的设计,尽显帅气...
  7. 2、Java Swing JFrame和JPanel:窗口容器和面板容器
  8. SQL语言之DQL语言学习(十一)分页查询
  9. C++STL常用查找算法
  10. Spring开启@Async异步方法(javaconfig配置)
  11. oracle有入参的试图,Oracle 带参视图
  12. sockert组成部分_Linux TCP/IP 协议栈的关键数据结构Socket Buffer(sk_buff )
  13. 计算机视觉基础——图像处理(彩色空间互转)cpp+python
  14. Oracle 11g Dataguard 物理备库配置(三)之Dataguard broker配置
  15. xb2xe2 是什么编码 php,python - 这是什么编码,如何解码
  16. 蓝牙要抢ZigBee的地盘?低功耗广域网络笑了
  17. Linux 服务器上安装 ANSYS Fluent 2020R2
  18. Java - springboot中md5加解密工具类
  19. 淘宝2011春季校园招聘笔试试题(回忆版)(附个人简历)
  20. Tomcat with muti instance

热门文章

  1. win10 :Excel文件打不开、显示“此应用无法在你的电脑上运行”怎么办?
  2. html表格设计(分列,设置边框)
  3. There are n lockers in a hallway numbered sequentially from 1 to n. Initially, all the locker doors
  4. java sendto,套接字编程:sendto始终以errno 22(EINVAL)失败
  5. windows10使用4G模块上网
  6. 蓝牙控制小车教程:STC89C52RC + HC-06蓝牙模块
  7. Pytest断言使用
  8. grep用法大全 grep常用用法总结
  9. 什么是脚本,脚本是什么
  10. 加密机PKCS#11国际加密标准解读-概念和常用接口函数(1)