我们的系统需要存储大约 3k 大小的 tiff 图像。我们在给定时间收到约 300 张图像,需要快速处理它们。一旦收到大约 100,000 张图像,这些图像就会从我们的系统转移到另一个存档系统或被清除。
我正在寻找关于图像文件的初始保存的最佳性能。传输图像以进行存档的任务对性能的要求较低。
什么存储位置(SQL Server 或文件系统)会在保存 tiff 图像时产生更好的性能?
是否有任何其他注意事项或陷阱需要注意?
我们的系统需要存储大约 3k 大小的 tiff 图像。我们在给定时间收到约 300 张图像,需要快速处理它们。一旦收到大约 100,000 张图像,这些图像就会从我们的系统转移到另一个存档系统或被清除。
我正在寻找关于图像文件的初始保存的最佳性能。传输图像以进行存档的任务对性能的要求较低。
什么存储位置(SQL Server 或文件系统)会在保存 tiff 图像时产生更好的性能?
是否有任何其他注意事项或陷阱需要注意?
将图像存储在文件系统中将为您提供更好的性能。您只需将一个条目放入 tiff 图像附件的相关数据库表中 - 并使用它来获取文件系统上图像的路径。
您可能希望通过将图像托管在 Web 服务器上来进一步提高性能 - IIS(如果相关)并让您的客户端应用程序(如果相关)直接从那里检索它们。
以我的经验,SQL Server 在将 blob 存储到数据库方面做得很好。只要我遵循与查询、规范化等相关的最佳实践。我发现它们运行良好。
出于某种原因,我个人不想在我的数据库中存储巨大的 PDF、DOC 和 JPG 文件,但是,这正是 Microsoft SharePoint 所做的,并且做得很好。
我肯定会考虑将 blob 放入我的数据库中。
SQL Server 2008 版本有一个名为 FILESTREAM 的新功能。他们的部分文档还有一个关于最佳实践的部分,MS 人员在其中指出,如果 BLOB 对象通常大于 1 MB,则 FILESTREAM 应该发挥作用。
该 MSDN 页面指出:
何时使用 FILESTREAM 如果满足以下条件,则应考虑使用 FILESTREAM: - 正在存储的对象平均大于 1 MB。对于较小的对象,将 varbinary(max) BLOB 存储在数据库中通常可以提供更好的流式传输性能。
所以我猜想使用 3 KB 的 TIFF,您可以将它很好地存储在 SQL Server 2005 表中的 VARBINARY(MAX) 字段中。由于它甚至比 SQL Server 的 8k 页面大小还要小,因此非常适合!
您可能还想考虑将您的 BLOB 放入它们自己的表中,并从那里引用您的“基本”数据行。这样,如果您只需要查询基本数据(您的 int、varchars 等),您的查询将不会因 BLOB 与其他内容混合存储而陷入困境。
马克
INPE/Brazil 的卫星目录系统存储了存储在文件系统中的 tiff 图像的参考。但图像有点大 - +/- 100 MB。如果文件必须在浏览器中显示,则 php 代码读取磁盘上的 tiff 内容并绘制它。