【问题标题】:Handling file size for SQL FILESTREAM data处理 SQL FILESTREAM 数据的文件大小
【发布时间】:2013-08-09 18:38:50
【问题描述】:

使用 Sql Server 的 FILESTREAM 功能在数据库中存储文档时,处理文件大小的正确方法是什么?

我知道您可以在文件流列上使用 TSQL 命令DATALENGTH(),但对于this Microsoft article,这可能并不总是最好的主意:

避免在应用程序中检索大量 BLOB 文件的数据长度。这是一个耗时的操作,因为大小未存储在 SQL Server 数据库引擎中。如果您必须确定 BLOB 文件的长度,请使用 Transact-SQL DATALENGTH() 函数来确定 BLOB 的大小(如果它已关闭)。 DATALENGTH() 不会打开 BLOB 文件以确定其大小。

我有点不清楚上面是否说您应该尽可能避免使用 DATALENGTH() 或者它是否是检索文件大小的推荐方法。

如果我必须经常访问文档大小以将其作为元数据显示给用户,那么推荐的检索方式是什么?将它们存储在单独的字段中?还是 datalength() 够快?

【问题讨论】:

  • 您需要确定 DATALENGTH() 对于您的应用程序是否足够快。你也是什么意思。
  • 不知道,抱歉。我对引用的文字仍然有些困惑。 :) 它只谈论 datalength() 还是谈论两种不同类型的大小检索?
  • 另外,使用单独的列自己存储大小有什么影响?为什么这是一个好/坏主意?

标签: .net sql-server tsql datalength sqlfilestream


【解决方案1】:

我相信这篇文章建议不要在可以避免的情况下使用 DATALENGTH()。

将文件大小以及有关文件的其他元数据(内容类型、扩展名、时间戳等)存储在单独的列中是一种合适的选择。这将允许您更有效地查询/过滤文件详细信息。

如果预计文件内容不会更改,则在保留文件流数据的同时简单地更新文件大小列是最简单的。

如果预计内容会发生变化,您还需要记住更新文件大小。这也可以在 Sql 中使用持久计算列来完成

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多