PDM中的文件放在文件服务器还是数据库中?
PDM中的文件到底是放到文件服务器上还是放在数据库中好?本来这是一个老话题了,很多年前大家都专门讨论过,但是我最近遇到几位朋友都向我咨询这个问题,觉得有必要再次比较系统地来专题聊聊;另外近几年的IT技术发展也很快,有很多新技术新方法出现,我也希望以软件开发者的角度与大家一起探讨这个问题。
第一:文件放在文件服务器中的工作原理。
的确,最早以前PDM中的关于图文档一般由两部分的数据组成,一是文档主记录,用于描述文档的属性,这部分的数据一般是放在数据库中;另外一部分是文档本身,这部分的数据一般是放在文件服务器中(PDM中经常称为文件仓库,英文是File-Vault)。而在文档主记录中,一般用一个字段来描述这个文件是放在哪个文件服务器的哪个具体路径,从而将两个部分的数据关联起来。(如果有文档的版本管理,这个模型会更加复杂一些,但基本原理是一样的)如图所示:
早期的PDM基本上都是采用这种数据库+文件服务器的模式来管理图文档的;
文件服务器提供文件上下载的方法大致有这样的几种方法:
1. 文件的共享服务,(windows编程中被称为“命名管道”);
2. 活动目录 Active Directory
3. FTP 服务器
以上几种各有各的优势和缺点,具体不展开说了。
第二:文件放在数据库服务器中的工作原理。
随着数据库技术的发展,特别是面向对象的技术在数据库领域的应用,特别是数据库处理大对象的能力和方法手段越来越丰富,很多新一代的PDM系统可以直接将文件对象放在数据库中管理,其基本的原理如下图所示:
也就是说文件记录在数据库中是数据表中的一条数据记录,而记录文件本身内容的是一个数据库的特殊字段,这种字段有很多类型,例如(BLOB,FLOB,CLOB)等,这种字段在存储文件等大对象的时候,大对象实际上存储在另外的“表空间”中,主记录表中仅仅存储大对象在这个表空间的地址指针。主记录数据表的访问速度没有任何影响。
而数据库管理员可以将“大对象表空间”指定到不同的磁盘分区,卷,硬盘,甚至其他计算机的目录中,数据库管理员可以随时追加“大对象表空间”的目录空间。这样虽然从存储的物理位置上,文件记录和文件内容本身虽然在不同的“空间”存储,但从逻辑上他们是一体的,从根本上保证了数据的完整性,一致性,并尽量降低了系统管理员的部署和维护难度。
我个人的偏好:
我更倾向与采用数据库存储的方式来解决文件存储的问题,这种方式带来的好处如下:
1. 数据的一致性、完备性得到根本保证:
由于文件本身,与文件记录从逻辑上是一条数据库记录,从而从根本上保证了数据的一致性和完备性。
另外,从编程角度,对于逻辑上需要保证“元事务特性”的数据操作,在数据库中得到了根本保证,比如某个文件要上传到PDM系统中,在上传过程中,网络出现故障,如果采用数据存储文件,那么这个文件在数据库中没有任何记录存在;而如果采用文件服务器,很有可能是数据库中有这个记录存在,而文件服务器中由于网络问题造成上传失败,文件没有存在,从而造成数据的不一致。
2. 部署更为简单, 对于数据存储,用户只需要架设数据库服务器就可以了。
3. 更为安全:
a) 文件的存储更安全安全,避免了文件服务器的共享服务,或者文件FTP服务带来的不安全因素。
b) 数据在传输过程中都通过数据库指定的TCP/IP协议和特定的端口进行,文件在传输过程中没有采用任何其他文件传输协议,与其他数据一样都是IP数据包。
c) 文件的存储避免了各种感染文件型病毒的可能。
3. 数据库的平台无关性:
a) 数据库可以与操作系统平台无关,文件的存放也自然与操作系统无关,进一步提高了数据的安全性。
b) 数据库还可以支持“裸盘”存储,也就是数据库的存储“空间”可以独立于操作系统之外,这样数据库对数据的物理操作不通过操作系统提供的接口,而直接对物理硬盘进行操作,更进一步提高的大数据量的访问性能。
4. 容量的扩展更为方便。由于数据库表空间可以随时扩展, 并且这种扩展不受到文件分区的限制,表空间可以扩展到其他分区,其他硬盘,甚至其他计算机上,保证了系统的持久应用。如果采用文件服务器的形式,这样的扩展会有较多的限制。
5. 数据备份和恢复更为容易。系统管理员只需要关心数据库如何备份就可以,数据库会自动将逻辑上是一体的数据从逻辑完备性的角度一起备份出来。如果采用文件服务器的形式,那么系统管理员还要考虑数据库本身的备份和文件备份的对应关系,很容易出现差错,特别是在热备份的过程中,由于系统还在使用,备份也是需要有时间过程的,任何增删改的操作,都可能使得备份出来的数据出现数据不一致的可能。
另外数据库本省提供多种的备份形式,用户在选择的时候更容易。
6. 全文检索更为方便,可以利用数据库的全文检索机制,对文件进行全文检索。
可能很多客户对数据库存储文件还有一些顾虑,例如:
1. 文件太多了,数据库会不会过于膨胀,这个库会不会“爆炸”,管理会不会复杂?
实际上从原理上分析,数据库中存放文件的管理模式,与文件的多少没有关系,文件在“大对象表空间”中的具体存放,都有数据库本身来维护,系统管理员只需要定期的给“大对象表空间”扩容就可以,并且这个扩容也非常简单,可以随时将其他分区的某个目录指定到这个空间中。
反而采用文件服务器,文件记录中要记录文件的具体物理地址,反而给数据的迁移,扩容带来一些管理工作。
2. 文件太多了,数据库会不会很慢?
两种方式比较起来,对文件主记录表的影响没有差别,不会因为文件多,采用文件服务器就比采用数据库服务器更快;很多企业用这种形式存储数据达到上百GB的数据,没有发现数据库的速度降低。
反而,我认为数据库中用大对象表空间来储存文件,有利于大数据量下的性能提高,因为数据库中可以建立索引,从而大大提高数据访问效率,这是文件服务器所不能。(e-works博客)
- 1企业的IT组织架构分布:集权与分权
- 2从SOA到云计算 盘点计算机技术发展历程
- 3考察软件产品 闲话企业信息化建设之合肥OA选型
- 4PDM中的文件放在文件服务器还是数据库中?
- 5SaaS模式孕育内部软件产品之外的替代方案
- 6全面分析SOA 面向服务架构的优势与隐患
- 7OA工作微博内容与当天的工作更加紧密得结合
- 8浅析合肥OA项目监理的必要性和过程
- 9合肥OA系统控制职能及注意的问题剖析
- 10从合肥OA到APS 寻找提高企业效率和效益的利器
- 11当IT有偿服务遭遇转型期的“中国特色”
- 12企业存储正在为垃圾数据付出昂贵代价
- 13离散性企业合肥OA实施能力的研究与分析(中)
- 14关注:关于合肥OA报表体系几个方面的思考
- 15第三代OA办公软件帮助企业从How To的过程转到Know的过程
- 16企业信息化合肥OA系统财务实施重难点解析
- 17三维立体看企业 三个角度给合肥OA画张像
- 18成功规划SOA必备的完整规划蓝图
- 19企业采用SaaS服务是IT投资与回报关键因素
- 20SaaS模式如何助力数据备份?
- 21供应链管理的应用 SCM实施之三原则
- 22浅析产品设计中的设计流程管理
- 23SCM供应链管理策略、技术与实务学习笔记
- 24企业进行合肥OA选型 如何把握主动权
- 25签订信息化项目合同八大注意(一)
- 26解决鸡肋难题 剖析SaaS的非典型性法则
- 27SaaS应用瓶颈给中小企业CIO带来新挑战
- 28融合时代共赢价值 细说SOA进阶的核心动力
- 29独家:功能伴随责任 双面虚拟化解析
- 30从合肥OA前期看CIO应对信息化生态链中各方