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

摘要:
常见的数据库系统有blob/image/二进制字段类型来处理这个问题。目前,这种解决方案在中国基本上是未知的,但在国外,例如Bugzilla/phpBB提供了选项。用户可以将文件内容保存在数据库或指定目录中。

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

作者: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 都提供了选项,用户可以把文件内容保存在数据库中、或者保存在指定目录中。并且,它们的文档中,都推荐把文件内容,存放在指定目录中下。想必它们经过认真的对比,发现“把文件内容,存放在指定目录中下”更好吧。我也觉得这种方法更好,自从知道这种解决方法,我把我所负责的项目,都转换成这种方式了,效果很不错。

免责声明:文章转载自《数据库系统中文件附件保存的最佳办法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇cratedb 做为prometheus 的后端存储LeetCode(71):简化路径下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

谈谈EF Core实现数据库迁移

        作为程序员,在日常开发中,记忆犹新的莫过于写代码,升级程序。升级程序包含两部分:一是,对服务程序更新;二是,对数据库结构更新。本篇博文主要介绍数据库结构更新,在对数据库升级时,不知道园友们是否有如下经历:         1)脚本文件中建表语句未作判断是否存在,而导致执行失败。         2)脚本文件中修改字段在建表语句之前,关联存储...

Hibernate

Hibernate环境搭建 Hibernate的API Hibernate的CRUD EE三层结构: web层       业务逻辑层    持久层         jdbc,DBUTils,Hibernate    Hibernate简介: 一个开源的对象关系映射框架,对JDBC进行了轻量级封装,将pojo与数据库表建立映射关系,是一个全自动的O...

pg_ctl — 启动、停止、重启 PostgreSQL

pg_ctl 名称 pg_ctl -- 启动、停止、重启 PostgreSQL 语法 pg_ctl start [-w] [-s] [-D datadir] [-l filename] [-o options] [-p path]pg_ctl stop [-W] [-s] [-D datadir] [-m s[mart] | f[ast] | i[m...

C# WinForm获取当前路径汇总

Winform获取应用程序的当前路径的方法集合,具体如下,值得收藏//获取当前进程的完整路径,包含文件名(进程名)。string str = this.GetType().Assembly.Location;result: X:xxxxxxxxx.exe (.exe文件所在的目录+.exe文件名)//获取新的Process 组件并将其与当前活动的进程关联的...

Openstack Mitaka 版本1

Openstack Mitaka 版本 计算节点扩容、cinder存储 目录 Openstack Mitaka 版本 计算节点扩容、cinder存储 1.增加计算节点 1.1 更改hosts解析 1.2 配置yum源 1.3 配置时间同步 1.4 安装openstack客户端和openstack-selinux 1.5 安装&配置安装nov...

Zabbix之配置文件详解

zabbix的配置文件一般有三种:zabbixserver的配置文件zabbix_server.confzabbixproxy的配置文件zabbix_proxy.confzabbix_agentd的配置文件zabbix_agentd.conf 1.zabbixserver的配置文件: NodeID=0 #分布式节点id号,0代表是独立服务器,默认是被注释掉...