Azure Blob存储的事务访问

nyn*_*n3x 10 azure-storage-blobs azure-sql-database

我想将文件存储在Azure Blob存储中.到现在为止还挺好.我还想存储关于该文件的附加元数据; 为此,我使用Azure SQL数据库(因此我可以轻松查询blob存储上的文件).

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

有没有办法,使用blob存储和sql存储创建这样的事务上下文?

Her*_*ero 8

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

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

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

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


Tri*_*nko 5

现有的 blob 是无害的,但是指向不存在的 blob 的数据库记录就会很糟糕。因此,我将使用以下逻辑来实现事务。

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

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