如何将图像用于预言机数据库表 11gR2



我创建了emp表来存储员工信息和他们的PP尺寸照片。此表有 empno (数字), emp_image_link(varchar2), ....等字段。 empno是使用数据库触发器自动生成的 ( max empno+1 )。

图片 :我不想将图像存储到数据库中,因为我相信这会导致大小,性能和可移植性方面的问题。所以图像应该在文件系统中D:images并且图像URL应D:imagesempno.jpg,这意味着emp_image_link字段将仅包含图像链接。

我已经在谷歌上搜索了很多关于这个的信息,每个人都在讨论如何存储到数据库中。我没有找到有关如何仅存储链接而不是图像的任何信息。我将使用Oracle Forms Developer 11gR2。谁能告诉我如何做到这一点。

提前谢谢你。

穆尔希德汗

"我不想将图像存储到数据库中,因为这会导致 我认为在尺寸,性能和便携性方面存在问题。所以 图像应该在文件系统中"

您的积分无效。

大小。 护照照片非常小,因此除非您存储像素数极高的照片,否则它们不会占用大量磁盘。 无论哪种方式,它们都会在数据库和操作系统中消耗相当数量的空间。

性能。唯一可能的问题是数据库服务器和中间层服务器之间的网络流量。 这将是大小的函数,因此可能是也可能不是真正的问题。 使用 na OS 文件存储会在检索每条记录的 JPG 时引入时间延迟。

可移植性。 全数据库解决方案比您建议的解决方案更具可移植性。 没有什么比目录路径更中断了。

有一件事你没有考虑过,但你真的应该在员工记录上是DML。 如果图片存储在数据库中,则它们与其余数据在同一事务中提交(因此与其余数据一致),则它们将同时备份,并且可以在同一窗口中恢复。 这些都不适用于单独服务器上的操作系统目录。


"存储在文件系统中...我得到了使用 BFILE 的解决方案"

BFILE 是将数据库记录与操作系统文件链接的机制。 因此,它是您定义问题的适当解决方案。但是 BFILE 指向数据库服务器上的文件,因此您将失去不将记录存储在数据库中(数据库和中间层服务器之间的网络流量)所获得的唯一可能的效率。 BFILE 不会与数据库一起备份,也不会受到任何事务一致性的约束。


"empno 是使用数据库触发器自动生成的(max empno+1)"

另一个坏主意。 它无法扩展,更重要的是,它无法在多用户环境中工作。 请使用序列,它们是为此任务而设计的。

最新更新