【问题标题】:Transactional Access of Azure Blob StorageAzure Blob 存储的事务访问
【发布时间】:2012-09-30 21:03:12
【问题描述】:

我想将文件存储在 Azure Blob 存储中。到目前为止,一切都很好。我还想存储有关文件的附加元数据;为此,我使用了 Azure SQL 数据库(因此我可以轻松地查询 Blob 存储中的文件)。

因此,当我向商店添加新文件时,我想确保 blob 以及元数据已成功写入。所以我想到了使用事务上下文之类的东西。

有什么方法可以使用 blob 存储和 sql 存储来创建这样的事务上下文?

【问题讨论】:

    标签: azure-sql-database azure-blob-storage


    【解决方案1】:

    据我所知,没有任何内置功能可以做到这一点;您需要自己管理。最简单的方案是先保存 Blob,然后添加数据库记录。由于数据库用作满足您需求的索引,因此在保存数据库记录之前,Blob 对您的代码基本上是不可见的。

    一个更复杂的选项是实现您自己的提交逻辑。您将处理数据库插入(例如,将记录上的标志设置为 0),保存 Blob,如果成功,则将数据库中的标志设置为 1。

    您也可以将元数据保存在 Azure Tables 中,但如果您有大量记录,在 Azure Tables 中搜索可能会显着减慢速度。大多数情况下,在 SQL 数据库中搜索会更快。

    您选择哪种方法取决于您的目标,但我认为第一种方法是最简单的。

    【讨论】:

      【解决方案2】:

      存在的 blob 是无害的,但指向不存在的 blob 的数据库记录将是错误的。因此,我会按照以下逻辑来实现交易。

      在创建时...首先添加 blob,然后创建数据库记录。如果 blob 上传失败,则返回。如果 blob 上传成功,但数据库记录失败,则删除 blob 并返回。关键是在成功上传 Blob 之前,您不希望创建数据库记录。如果无法更新数据库记录,您还需要清理 blob。如果 blob 清理失败,我只需要一个定期运行的服务来清理未引用的 blob一个多小时前创建的,这样它就不会尝试在上传和创建数据库之间删除一个记录。

      删除时...首先删除数据库记录。如果失败,只需返回,blob 和数据库记录都仍然存在。如果数据库记录被删除,那么 blob 不会因为保留在那里而造成任何损害,因此您可以尝试立即删除它,或者将其留给清理服务稍后处理。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-25
        • 2016-08-23
        • 2020-06-03
        • 2021-12-18
        • 2021-11-19
        • 1970-01-01
        • 2019-10-13
        • 2013-01-28
        相关资源
        最近更新 更多