2012-10-10 132 views
6

我想将文件存储在Azure Blob存储中。到现在为止还挺好。我也想存储关于文件的附加元数据;为此,我使用了Azure SQL数据库(这样我就可以轻松地查询blob存储上的文件)。Azure Blob存储的事务访问

因此,当我添加一个新的文件到商店,我想确保blob以及元数据已成功写入。所以使用像事务处理这样的东西出现在我脑海。

有什么办法,使用blob存储以及sql存储创建这样的事务上下文吗?

回答

5

就我所知,没有任何内置的功能可以做到这一点;你需要自己管理这个。最简单的情况是先保存你的blob,然后添加你的数据库记录。由于数据库充当您的需求的索引,Blob在您的代码中基本上是不可见的,直到数据库记录被保存。

更多的参与选项是实现您自己的提交逻辑。你会处理数据库插入(与设置为0,例如备案标志),保存斑点,如果成功集数据库1.

的标志您还可以保存元数据天青表,尽管如果您有大量记录,在Azure Tables中搜索会显着减慢。在SQL数据库中搜索大部分时间会更快。

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

1

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

创建...先添加blob,然后创建数据库记录。如果blob上传失败,请返回。如果blob上传成功,但数据库记录失败,则删除blob并返回。关键是你不想创建一个数据库记录,直到成功的blob上传后。如果数据库记录无法更新,您也希望清理blob。如果斑点清除失败,我只希望有一个定期运行清理未引用的斑点服务创建一个多小时前刚刚因此它不会试图删除数据库记录的上传和创作之间的一个。

在去除...先删除数据库记录。如果失败了,只需返回,blob和数据库记录都仍然存在。如果数据库记录被删除OK,则斑是不缺钱用剩下的还有什么,所以你可以尝试立即删除它或把它留给清理服务采取的后续护理。