刚刚开始研究Azure框架。
假设您在Table存储中创建了一行。
然后在Blob存储中创建一个Bob,
有没有什么方法可以将你刚刚添加到表中的内容与你刚刚创建的Blob关联起来?
或者任何时候你有相关的条目,你必须使用SQL Azure?
这将是令人失望的,因为假设你想要在blob中存储一些视频,但在SQL Azure表中有一些行你想要链接到该Blob。
既然你不能有这个链接,你必须以某种方式将你的视频存储在SQL Azure中?
发布于 2012-04-09 11:56:04
您可以将存储在blob中的文件的唯一文件名存储到azure表行中。不建议在Azure表或SQL azure表中存储完整的视频/二进制内容,因为检索会变得有点慢,并且SQL azure与blob相比有点昂贵。
发布于 2012-08-28 19:34:44
只要你仔细选择你的blob文件名,你就应该能够在你的Azure表中引用该文件名。但是,要注意如何命名它。使用基于时间戳的名称并在表中引用该名称是非常诱人的。然而,使用Azure,你显然是在使用一个可伸缩的解决方案,最终可以实现高度并行。
使用文件名的GUID以保证唯一性。或者,如果您希望能够根据添加项目的时间更容易地浏览存储,可以选择带有GUID后缀的日期格式YYYYMMDDHHMMSS。
发布于 2016-06-16 18:12:10
这是完全可能的,并且做了很多次,我个人为我参与的一个项目实现了这样的架构。
我使用Blob Name作为分区键,使用Blob Container Name作为我写入Table的实体的行键。
您也可以通过其他方式选择Blob Container Name作为PK,选择Blob Name作为RK。然后,您可能希望考虑表中的分区不会变得太大,并且如果您的blob容器变得太拥挤,则会导致一些性能问题。
有一件事你需要显式处理,Blob Name和Blob Container Name具有不同于table Partition keys和table Row Keys的命名约束,因此在将Blob Name和Blob Container Name用作PK和RK并将实体写入到表中或从表中读取实体之前,需要对它们进行清理。
以下是如何清理要用作表键的Blob Name %s和Blob Container Name %s:
public static readonly Regex DisallowedCharsInTableKeys = new Regex(@"#%/?\u0000-\u001F\u007F-\u009F");
string sanitizedKey = DisallowedCharsInTableKeys.Replace(BlobName,disallowedCharReplacement);
在此阶段,您可能还希望在已清理密钥(Partition key或Row Key)的前面加上原始密钥的散列(即。斑点名称),以避免具有相同消毒值的不同无效密钥的假冲突。
https://stackoverflow.com/questions/10068646
复制相似问题