刚开始研究Azure框架。
只是说你在表存储中创建了一行。
然后在Blob存储中创建一个Bob,
您是否可以通过某种方式将刚刚添加到表中的内容与刚刚创建的Blob相关联?
或者,只要您有相关条目,就必须使用SQL Azure?
如果你想将一些视频存储在一个blob中,但是想要链接到Blob的SQL Azure表中有一些行,那将是令人失望的。
由于您无法拥有此链接,您必须以某种方式将您的视频存储在SQL Azure中?
答案 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相关联。