合理使用Blob/Clob

简介:

 用了十多年的数据库,工作需要也经常要帮忙数据库性能调优。这里简单列一些我平时工作时用数据库的体会和心得:

介绍:

虽然数据库原生支持Blob(二进制大对象)和Clob(字符串大对象),但是从性能的考虑,我们把这些内容放在数据库里面不合适的。比如说我有1个100多M的图片(Blob),或者说我有一大段文本(Clob),这种东西是千万杜绝放在数据库中的。原因有3点。(1)加大了数据库维护和备份的成本。因为这些大数据的存在,使得我们要很多额外空间来进行数据库备份。(2)是因为数据库是一种读快写慢的系统,这就意味着如果我们要变更这些内容,会非常的不方便。比如我们要在大段文本中加或者改写内容,我们必须把这段Clob删除后再重新添加。非常费时间。(3)在现在的新系统架构中我们一般都用了分层的思想,比如说,数据库层,应用层,文件存储层,浏览器等。而在考虑到系统整体的性能的时候,往往跨越层级的访问是最大因素。而我们如果吧这些图片,大段文本都放在数据库的话,那么最简单的访问都必须要横跨多层。

解决方法:

一般我们为了处理这种Blob,Clob的数据,我们常用的解决方法是,我们可以建立一个文件服务器,然后把相应的图片,或者文本(放在某文件中),然后把这些图片和文本放在文件服务器上,而在数据库中保存的是这些图片资源或者文本资源的路径。这样的好处有3点。(1)读写速度提升。因为 文件服务器上的内容是扁平内容,而数据库系统中的内容是结构化的数据,所以从读写效率上来说,对于文件服务器内容的读写速度要远远高于对于数据库系统的读写速度.(2)可维护性提升。如果我们把这些图片,文本放在文件服务器上,那么我们非常容易维护。因为我们如果要替换图片,或者替换文本,我们只要把新的文件取代原来位置的图片和文本就可以了,而数据库中因为保存的是引用的图片或者文本的位置,所以我们根本不需要去改那个路径。这也是一种弱耦合关系。而前面也说了,如果这些内容以LOB的形式放在数据库中的话,就算要做非常微量的改动,也必须删除原来对象然后创建新对象,这个是非常浪费时间的。(3)无需海量的备份开销。因为数据库备份很麻烦,不仅仅要备份内容,还要备份索引等。而文件系统的备份则无疑是最简单的硬盘内容的复制,所以开销很小。





本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1163402,如需转载请自行联系原作者

目录
相关文章
|
3月前
|
存储 XML 关系型数据库
深入理解MySQL中的BLOB和TEXT数据类型
【8月更文挑战第31天】
519 0
|
存储 Oracle 关系型数据库
BLOB/ClOB存储图片、文档与视频
BLOB/ClOB存储图片、文档与视频
119 2
|
11月前
blob和base64互转
blob和base64互转
132 0
|
存储 otter 关系型数据库
BLOB和VARBINARY类型的字段不能设置为NULL
BLOB和VARBINARY类型的字段不能设置为NULL
216 1
|
存储 关系型数据库 MySQL
text和blob
text和blob
151 0
|
存储 Oracle 关系型数据库
oracle blob和 varchar2互相转换,mybatis 读取blob乱码等相关问题总结
oracle blob和 varchar2互相转换,mybatis 读取blob乱码等相关问题总结
765 0
oracle blob和 varchar2互相转换,mybatis 读取blob乱码等相关问题总结
|
存储 关系型数据库 MySQL
MySQL 中 blob 和 text 数据类型详解
前面文章我们介绍过一些常用数据类型的用法,比如 int、char、varchar 等。一直没详细介绍过 blob 及 text 类型,虽然这两类数据类型不太常用,但在某些场景下还是会用到的。本篇文章将主要介绍 blob 及 text 数据类型的相关知识。
761 0
|
存储 关系型数据库
postgre存储bytea类型(blob)
postgre存储bytea类型(blob)
790 0
postgre存储bytea类型(blob)
|
SQL 存储 Java
JDBC能否处理Blob和Clob?
Blob是指二进制大对象(Binary Large Object),而Clob是指大字符对象(Character Large Objec),因此其中Blob是为存储大的二进制数据而设计的,而Clob是为存储大的文本数据而设计的。
1320 0
|
Oracle 关系型数据库 Java