我有一个使用 Windows Azure 作为后端的 WPF 应用程序。我使用 SQL Azure 存储 WPF 应用程序通过 WCF 服务访问的数据。我需要能够在服务器端存储二进制文件(例如图像),并想知道存储这些文件的最佳方式是什么。我可以将文件放在 SQL 数据库中,但我不确定是否建议这样做。假设要存储大约 2000 个文件(总大小约为 1GB)。这些文件被频繁访问(最好缓存在客户端)。
有什么建议么?
我有一个使用 Windows Azure 作为后端的 WPF 应用程序。我使用 SQL Azure 存储 WPF 应用程序通过 WCF 服务访问的数据。我需要能够在服务器端存储二进制文件(例如图像),并想知道存储这些文件的最佳方式是什么。我可以将文件放在 SQL 数据库中,但我不确定是否建议这样做。假设要存储大约 2000 个文件(总大小约为 1GB)。这些文件被频繁访问(最好缓存在客户端)。
有什么建议么?
正如@Blam 指出的那样,Blob 存储是存储大型二进制对象的更好方法。每个 blob 都有一个看起来像https://mystorage.blob.core.windows.net/somecontainer/someblob.jpg
. 每个 blob 最多可达 200GB。您可以轻松地将 blob 的 URI 以及相关元数据存储在 SQL Azure 中。
然后,您可以选择通过 WCF 服务返回图像或提供直接访问。对于前者,您基本上可以从 WCF 服务实现调用 Blob 存储以检索 Blob,然后在 WCF 响应中返回它。
使用后者,它变得有点棘手。您可以选择将 blob 设为公开还是私有。公共 blob 非常适合用于不需要用户权限即可查看的徽标、CSS 和其他信息。私有 blob 需要使用您的存储帐户密钥(您永远不应该提供)。但是,使用称为共享访问签名的功能,您可以在查询字符串上提供带有特殊哈希的 URL,提供临时访问(最多 1 小时)。基本权衡:如果您通过 WCF 服务下载二进制文件,您的代码将与任何其他 WCF 服务一样工作,但您可能会发现自己扩展到 Azure VM 的多个实例以支持增加的负载。如果您使用共享访问签名,您可能需要修改您的 WPF 应用程序以获取基于 URL 的二进制文件。但是,这会减轻 WCF 服务的负载,因为您随后将直接访问 Blob 存储以下载二进制内容(这是由 Windows Azure 管理的大规模多租户存储系统)。
请参阅此处了解 Windows Azure 存储定价。它每 GB 不到 13 美分,比 SQL Azure 便宜得多。
天蓝色斑点。与 blob 相比,SQL Azure 是昂贵的。
http://www.windowsazure.com/en-us/home/features/storage/