`
hbxflihua
  • 浏览: 688030 次
  • 性别: 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/

分享到:
评论

相关推荐

    很实用的端口接收数据并存储到数据库中的程序

    在IT领域,网络通信是不可或缺的一部分,而端口接收数据并将其存储到数据库中的程序设计则是网络编程中的重要环节。这个程序的标题“很实用的端口接收数据并存储到数据库中的程序”揭示了它的核心功能,即监听特定...

    Qt从数据库中提取数据给变量赋值

    Qt中执行sql语句,当需要变量存取从数据库中获取的值,首先取出一行数据,然后按列将数据分别赋给变量

    全国中小学数据库大全mysql

    此数据库包含三个表: nobook_city :城市表 nobook_school:学校表 nobook_schooltype: 学校类型表 具体使用方式: 导入数据库后,通过省份城市及学校类型进行筛选,并且学校数据表已经设置首字母,所以可以根据首...

    使用Springboot上传图片并将URL保存到数据库中

    本示例将详细讲解如何实现一个简单的文件上传功能,将图片上传至服务器,并将图片的URL保存到数据库中。 首先,我们需要在Spring Boot项目中引入所需的依赖。对于文件上传,Spring Boot本身提供了`spring-boot-...

    第三版.zip(数据库系统原理与设计第三版课后答案 )

    《数据库系统原理与设计》是计算机科学领域中一本经典的教材,尤其在数据库理论与实践方面具有广泛的影响力。这本书的第三版通常被众多高校选为计算机专业的必修课程教材,其内容深入浅出地介绍了数据库的基本概念、...

    三层数据库系统服务器端源码

    三层数据库系统服务器端源码是IT领域中一种常见的软件架构设计,主要分为表现层、业务逻辑层和数据访问层。这种架构将应用的功能模块划分得更为清晰,有助于提高代码的可维护性和可扩展性。本资源包含的是用Delphi...

    保存到数据库程序(VB6.0源代码编写)可将数据保存到access数据库中

    标题中的“保存到数据库程序(VB6.0源代码编写)”指的是使用Visual Basic 6.0编程语言编写的程序,其主要功能是将数据存储到Access数据库中。Access数据库是微软开发的一种关系型数据库管理系统(RDBMS),适用于小型...

    java实现Excel数据导入到数据库

    在Java编程环境中,将Excel数据导入到数据库以及将数据库数据导出到Excel是常见的数据处理需求。本篇文章将深入探讨如何使用Java实现这两个功能,主要涉及的技术栈包括Apache POI库用于操作Excel,以及JDBC(Java ...

    C# 利用log4net 把日志写入到数据库

    在本篇内容中,我们将深入探讨如何利用开源日志框架log4net将应用程序的日志信息记录到数据库中。 **一、log4net简介** log4net是一款广泛使用的、高度可配置的日志框架,它为.NET开发者提供了一套灵活的日志记录...

    WEB页面,一个上传Excel文件并将内容保存到数据库中

    在Web开发中,将用户上传的Excel文件读取并保存到数据库是一项常见的需求。这个项目实现了这个功能,提供了从头到尾的完整代码,对于学习和应用都非常有帮助。下面我们将详细探讨涉及的知识点。 首先,我们需要理解...

    Labview访问SQL server数据库三种方法

    Labview访问SQL server数据库三种方法: 1、基于配置ODBC数据源的方法访问SQL server; 2、基于建立ODBC连接的方法访问SQL server; 3、基于建立OLEDB连接的方法访问SQL server; 4、常用SQL语言;

    图片存储到数据库保存二进制文件,并在DATAGRIDVIEW中显示出来

    在C#编程中,将图片存储到数据库并以二进制数据的形式保存,以及在DataGridView控件中显示这些图片,是一项常见的任务。这种操作在处理大量图像数据时尤其有用,例如在开发一个需要展示产品图片的电子商务应用或者...

    浙江省计算机三级数据库历年真题

    【浙江省计算机三级数据库历年真题】是一份针对浙江省高等学校计算机等级考试中三级数据库技术及应用科目的考试试卷。这份试卷包含判断题和选择题两部分,主要考察考生对数据结构、算法分析、数据库理论和操作的理解...

    C#保存图片到数据库。

    本篇将详细讲解如何利用C#将图片保存到SQLite数据库,以及如何进行查看、删除等操作。 首先,我们需要了解SQLite,它是一个轻量级的、开源的、嵌入式的关系型数据库,适用于桌面应用和移动设备。在C#中,我们可以...

    jsp 上传图片并保存到数据库里的servlet代码和jsp代码

    本主题将深入探讨如何使用JSP和Servlet来实现一个图片上传功能,并将图片数据存储到Oracle数据库中。 首先,我们需要理解JSP和Servlet的角色。JSP是用于创建动态内容的视图层技术,而Servlet则是Java编写的应用程序...

    JAVA将一个数据中数据定时自动复制(抽取)到另一个数据库

    本文将深入探讨如何使用Java编程语言实现从一个数据库中定时自动抽取数据并复制到另一个数据库,以达到数据库间的实时或近实时同步。 首先,我们需要了解基础概念。Java是一种广泛使用的面向对象的编程语言,具有...

    java多个数据库实现数据同步

    数据同步是指在两个或多个数据库之间,当某个数据库中的数据发生改变时,这些变化能够被实时或者近实时地反映到其他数据库中。这有助于防止数据丢失和减少数据冲突,保证各个节点的数据一致性。 在Java中,实现多...

    java 读取txt数据并保存到数据库中源代码

    java 读取txt文本文件中的数据并保存到数据库中源代码,假设txt已有格式,并以","分隔。其中的sql包需要自己去微软官网下载。

    VB编程资源大全(源码 数据库)

    d015_chunkole.zip 将多媒体文件保存到数据库中,或将数据库中的多媒体文件显示出来(90KB) 43,d014_dbpic.zip 把图片放到数据库中(19KB) 44,d013_dbgrid3.zip 使用没有连接到数据库的 DBGrid 控件(5...

    常用内存数据库的比较

    内存数据库是一种新型的数据库管理系统,它将整个数据库放入内存中,以提高数据库的性能和响应速度。与传统的磁盘数据库相比,内存数据库具有很多优势,如快速的数据访问速度、低延迟、低成本等。 概念: 内存...

Global site tag (gtag.js) - Google Analytics