我们正在将核心产品的数据存储迁移到 Cosmos DB。对于文档,它效果很好,但我无法找到附件所需的信息。
我可以使用 Microsoft.Azure.DocumentDB NuGet ackage v 1.19.1 成功地通过 C# 代码中的附件完成我想要的所有操作。
根据我找到的信息,帐户中所有附件的总大小不得超过 2GB。这是非常有限的。此处找到的信息:
https://learn.microsoft.com/en-us/azure/cosmos-db/sql-api-resources#attachments-and-media
它指出:
Azure Cosmos DB allows you to store binary blobs/media either with Azure Cosmos DB (maximum of 2 GB per account) or to your own remote media store.
似乎有一些暗示,您可以创建指向存储在其他地方的资源的附件。也许在 CDN 上。但我找不到任何有关如何从 C# 实际执行此操作的文档。
有谁知道 Cosmos DB 实际上是否可以附加到存储在自身外部的 BLOB 有效负载?如果是这样,.NET NuGet 包可以做到这一点还是仅适用于纯 REST 调用?
提前非常感谢。
最佳答案
没有任何内置的东西可以管理外部存储的附件。相反,由您决定存储它们然后引用它们。
最常见的模式是将 URL 与文档一起存储到特定附件(例如存储到 Azure 存储中的 blob)。这实际上导致了两个操作:
- 从 Cosmos DB 检索文档的查询
- 根据返回的 Cosmos DB 文档中找到的 URL 从存储中读取数据。
注意:管理引用内容的所有责任都由您承担:更新、删除等。如果您使用 Blob 存储,则需要处理诸如私有(private)访问与公共(public)访问(以及生成 SAS必要时使用私有(private) URL,将 URL 返回给您的客户端时,而不是流式传输内容)。
还有一点:CDN 本身并不是一种存储机制。您无法将某些内容直接存储到 CDN;这更像是 Azure 存储(用于公共(public)访问内容)之上的一层。
关于c# - Cosmos DB 附件限制和备用附件位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48121988/