Azure tables, blobs



刚开始研究Azure框架。

假设您在表存储中创建一行。

然后,在 Blob 存储中创建 Bob,

有没有办法将刚刚添加到表中的内容与刚刚创建的 Blob 相关联?

或者,只要您有相关条目,就必须使用 SQL Azure?

这将是令人失望的,因为假设你想在 blob 中存储一些视频,但在 SQL Azure 表中有一些行你想要链接到 Blob。

由于您无法拥有此链接,因此您必须以某种方式将视频存储在SQL Azure中?

可以将存储在 Blob 中的文件的唯一文件名存储到 Azure 表行中。不建议将完整的视频/二进制内容存储在 Azure 表或 SQL Azure 表中,因为与 blob 相比,retrival 会变得有点慢,而且 SQL Azure 有点贵。

只要仔细选择 blob 文件名,就应该能够在 Azure 表中引用该文件名。但是,请注意如何命名它。使用基于时间戳的名称并在表中引用该名称是非常诱人的。但是,使用 Azure,显然使用的是可缩放的解决方案,最终可以高度并行。

使用 GUID 作为文件名以保证唯一性。或者,如果您希望能够根据添加项目的时间更轻松地浏览存储,可以选择带有后缀 GUID 的日期格式 YYYYMMDDHHMMSS。

这是完全可能的,并且做了很多次,我个人为我参与的一个项目实现了这样的架构。

我使用 Blob 名称作为

分区键,使用 Blob 容器名称作为我写入表的实体的行键。

也可以以其他方式执行此操作,选择"Blob 容器名称"作为"PK",选择"Blob 名称"作为 RK。然后,你可能要考虑表中的分区不会变得太大,如果 Blob 容器太拥挤,则会导致一些性能问题。

不过,有一件事需要显式处理,Blob 名称和 Blob 容器名称具有不同的命名约束,然后是表分区键和表行键,因此需要清理 Blob 名称和 Blob 容器名称,然后再将它们用作 PK 和 RK 并将实体写入表或从表中读取实体。

下面介绍如何清理要用作表键的 Blob 名称和 Blob 容器名称:

public static readonly Regex DisallowedCharsInTableKeys = new Regex(@"[\#%/?\u0000-\u001F\u007F-\u009F]");

字符串 sanitizedKey = DisallowedCharsInTableKeys.Replace(BlobName, disallowCharReplacement);

在此阶段,您可能还希望在清理后的键(分区键或行键)前面加上原始键的哈希值(即。Blob 名称),以避免具有相同清理值的不同无效键发生错误冲突。

Azure 支持将元数据与 blob 关联。元数据本质上只是名称-值对。以下视频可能有用:http://www.bestechvideos.com/2009/04/15/mix09-windows-azure-storage

因此,你可能希望使用元数据来执行相反的操作,而不是将表与 Blob 关联。

最新更新