所以我有这个要求,说应用程序必须允许用户上传和下载,每月(大多是PDF,DOC,XLS)约6000文件。数据库中的BLOB VS磁盘存储的文件
我正在考虑这方面的最佳解决方案。问题是我将在数据库中使用BLOb,还是使用简单的文件层次结构来编写/读取这些文件。
的应用程序体系结构是基于Java 1.6,春季3.1和Dojo,Informix的10.X.
所以我在这里我只是被告知根据你的经验。
所以我有这个要求,说应用程序必须允许用户上传和下载,每月(大多是PDF,DOC,XLS)约6000文件。数据库中的BLOB VS磁盘存储的文件
我正在考虑这方面的最佳解决方案。问题是我将在数据库中使用BLOb,还是使用简单的文件层次结构来编写/读取这些文件。
的应用程序体系结构是基于Java 1.6,春季3.1和Dojo,Informix的10.X.
所以我在这里我只是被告知根据你的经验。
如果在数据库中有关这些文件的其他数据,存储文件到文件系统,使得它更复杂:
基于文件系统的解决方案的好处在于,有时可以直接访问文件,比如将图像的一部分复制到别处,这很方便。同时存储二进制数据当然可以大大改变数据库的大小。但无论如何,这两种解决方案都需要更多的磁盘存储。
当然,所有这一切都可以比现有多问DB资源。一般而言,性能会受到很大影响,特别是如果在本地文件系统和远程数据库之间做出决定。在你的情况下(每月6000个文件)原始性能不会是问题,但延迟可能是。
当询问什么是“最好”的解决方案,这是一个好主意,包括您的评价标准 - 速度,成本,简单,维护等
答案米克Maunu了相当多的钱。 20年来我没有使用过Informix,但是大多数数据库在处理BLOB时有点慢 - 特别是BLOB进出数据库的步骤可能会很慢。
随着更多的用户同时访问系统,这个问题往往会变得更严重,特别是如果他们使用Web应用程序 - 应用程序服务器必须非常努力地将文件导入和导出数据库,可能会消耗更多的内存对于那些比正常要求更高的请求,并且可能需要更长的时间才能完成与“正常”页面相关的文件相关请求。
这可能导致Web服务器只有中等负荷下放缓。如果您选择将文档存储在数据库中,我强烈建议您运行一些性能测试以查看是否有问题 - 这种解决方案往往会暴露您的设置中的漏洞,否则这些漏洞将不会被发现(网络速度慢连接到数据库服务器,RAM在你的web服务器不足等)
为了避免这种情况,我已经存储在数据库中的文档的“主人”的副本,所以他们都被备份起来,和我可以询问数据库问题,如“我是否拥有用户x的所有文档?”。但是,我在Web服务器上使用了一个缓存,以避免从数据库中读取比我需要的更多的文档。如果您有像内容管理系统那样的“一次写入,多次读取”时间解决方案,缓存可以获得保留,这种方式会很有效。
你打算使用哪个数据库? – 2012-07-11 17:52:57
好点,这是Informix 10.X – 2012-07-11 18:54:19
我想pro数据库的唯一一点是并发访问...但是,无论如何,数据库也使用文件(其中一些主要使用RAM,但一旦填充,它们缓存到文件)。直接使用文件将节省数据库资源(连接,查询等) – PEM 2012-07-12 07:19:20