zoukankan      html  css  js  c++  java
  • 数据库系统中文件附件保存的最佳办法

    数据库系统中文件附件保存的最佳办法

    作者: http://blog.csdn.net/jacklondon

    http://blog.csdn.net/jacklondon/archive/2010/10/26/5966558.aspx

    开发数据库系统的人很多,我相信也有很多人碰到过要将文件保存在数据库中的问题。常见的数据库系统,都有 blob/image/binary 之类的字段类型,用于处理这个问题。

    软件开发人员,都会碰到这个问题,也都会被这个问题困住一两个星期。

    以 Java/JDK 为例, JDBC 驱动程序中,对这个问题也经过多年、历经多次版本升级,才能解决。而且代码还不能跨数据库。 

    C# 也一样,总之是麻烦。

    其实,这个问题可以有另一思路,更简单,更高效。值得系统架构师们考虑:

    1. 在数据库中,单独用一个表,处理所有各类文件,只保存文件的信息

    TT_BINARY_DATA_INFO (bin_uuid, file_size, file_name,data_type,compress_format,memo,created_dt,created_by,updated_dt,updated_by,updated_cnt)

    上面的表中, compress_format 为文件压缩格式,可以不压缩,也可以用 zip 压缩格式,或者其它。

    2. 在指定目录中,保存文件内容(按年月划分子目录,或者不分子目录),文件名为 uuid.dat

    采用这一种方案的原因是,数据库系统通常处理不好二进制数据,要么数据多了很占用磁盘空间,导致数据库性能下降、备份时间更长;要么是文件大了无法保存。而采用以上方案,这些问题都不存在:备份更快了;文件大了也能轻松应付;程序更容易写;不论哪种数据库都可以用。

    这一解决方案,目前在国内基本无人知晓,但在国外,举例来说,Bugzilla/phpBB 都提供了选项,用户可以把文件内容保存在数据库中、或者保存在指定目录中。并且,它们的文档中,都推荐把文件内容,存放在指定目录中下。想必它们经过认真的对比,发现“把文件内容,存放在指定目录中下”更好吧。我也觉得这种方法更好,自从知道这种解决方法,我把我所负责的项目,都转换成这种方式了,效果很不错。

  • 相关阅读:
    Docker
    Docker
    Docker
    Docker
    Docker
    Docker
    pandas——向已经存在的excel数据写入data
    python——利用UI选择路径
    python——装饰器的使用
    python——生成器(协程)gevent多任务
  • 原文地址:https://www.cnblogs.com/jacklondon/p/1861923.html
Copyright © 2011-2022 走看看