Azure表,blob

时间:2012-04-09 03:40:02

标签: azure blobs

刚开始研究Azure框架。

只是说你在表存储中创建了一行。

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

您是否可以通过某种方式将刚刚添加到表中的内容与刚刚创建的Blob相关联?

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

如果你想将一些视频存储在一个blob中,但是想要链接到Blob的SQL Azure表中有一些行,那将是令人失望的。

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

只要您仔细选择blob文件名,就应该能够在Azure表中引用该文件名。但是,要小心你的名字。使用基于时间戳的名称和表中的引用非常诱人。但是,使用Azure显然使用的是可扩展的解决方案,最终可以实现高度并行。

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

答案 2 :(得分:0)

完全有可能并且多次完成,我个人为我工作的项目之一实现了这样的架构。

我使用Blob Name作为分区键,将Blob容器名称用作我写入Table的实体的Row Key。

您也可以采用其他方式,选择Blob Container Name作为PK,Blob Name作为RK。然后你可能想要考虑你的表中的分区不会太大,如果你的blob容器太拥挤,会引起一些性能问题。

您需要明确处理一件事,Blob Name和Blob容器名称具有不同的命名约束,然后是表分区键和表行键,因此您需要清理Blob名称和Blob容器名称并在使用之前它们作为PK和RK并将实体写入表或从表中读取实体。

以下是清理Blob名称和Blob容器名称以用作表键的方法:

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

string sanitizedKey = DisallowedCharsInTableKeys.Replace(BlobName,disallowedCharReplacement);

在此阶段,您可能还希望使用原始密钥的散列(即Blob名称)为已清理密钥(分区键或行密钥)添加前缀,以避免具有相同清理值的不同无效密钥的错误冲突。 / p>

答案 3 :(得分:-1)

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

因此,您可能希望使用元数据进行相反的操作,而不是将表与blob相关联。

相关问题