【问题标题】:Avoiding loading whole blob to memory避免将整个 blob 加载到内存中
【发布时间】:2019-12-13 16:42:40
【问题描述】:

我将大文件 (50-500MB) 存储在数据库中。一旦被应用程序加载,它就不需要内存中的整个文件。我如何将表行(或特别是从行中的安装程序)直接提取到内存中,同时避免将整个文件加载到内存中(所以是一种缓冲下载到文件中)?

到目前为止,我还没有找到避免加载文件的解决方案。相反,我将请求转发到加载整个文件的烧瓶服务器,然后允许应用程序实例将其下载到文件中。然而,这似乎不是一个很好的解决方案。

【问题讨论】:

    标签: sql-server tsql sqlalchemy pymssql


    【解决方案1】:

    您可能正在寻找FILESTREAM (SQL Server)

    FILESTREAM 使基于 SQL Server 的应用程序能够在文件系统上存储非结构化数据,例如文档和图像。应用程序可以利用文件系统的丰富流式 API 和性能,同时保持非结构化数据和相应结构化数据之间的事务一致性。

    这很有趣,因为在 SQL Server(适用于 Windows)上,它可以将文件数据流式传输到 Windows 客户端,而无需将其全部加载到 SQL Server 的内存中:

    Win32 流支持在 SQL Server 事务的上下文中工作。在事务中,您可以使用 FILESTREAM 函数来获取文件的逻辑 UNC 文件系统路径。然后使用 OpenSqlFilestream API 获取文件句柄。然后这个句柄可以被 Win32 文件流接口使用,例如 ReadFile() 和 WriteFile(),通过文件系统访问和更新文件。

    请注意,此时它是not supported on SQL Server 2017 for Linux

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      • 2019-07-02
      • 1970-01-01
      • 2012-03-31
      • 2020-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多