我对Azure表存储非常陌生,分区键的概念仍然是一个我还没有信心知道我是否正确进行的领域。下面是我提出的存储博客帖子评论数据的解决方案。我已经注释了所有内容,所以我希望我的想法是基于代码的自我解释。
- 行和分区键看起来ok吗?
- 我真的需要一个名为"CommentId"的字段吗?(在我看到的例子中,似乎没有一个特定的ID字段,就像在传统的SQL存储中一样。)
- 表的作用域应该是什么?(我目前设想一个表,用于所有博客文章的所有评论。)
谢谢你的想法,我可能没有考虑到…
本
public class CommentEntity : TableEntity
{
/// <summary>
///
/// </summary>
/// <param name="CommentId">Unique identifier for the comment</param>
/// <param name="ReferencedBlogPostId">Identifier representing the post which this comment references</param>
public CommentEntity(int CommentId, int ReferencedBlogPostId)
{
this.PartitionKey = ReferencedBlogPostId.ToString();
this.RowKey = CommentId.ToString();
}
public CommentEntity() { }
// public int CommentId { get; set; } (Moved to above constructor)
// public int ReferencedBlogPostId { get; set; } (Moved to constructor)
//If this is in reply to another comment, reference that CommentId here
public int ParentCommentId { get; set; }
//Time that the post was made
public DateTime PostedTime { get; set; }
//An Id value representing the author of the comment in another datastore
public int AuthorId { get; set; }
}
我觉得你的设计看起来不错。这取决于你如何找回它们。在您的示例中,您有一个博客系统,因此我假设您需要单独检索您的博客及其所有评论(以及子评论),那么您可以将博客id作为分区键并在一个查询中检索所有评论,并且它还确保同一博客下的所有评论都存储在azure数据中心的相同数据集群中,具有最大的性能。
如果您需要更高的性能,我建议您也存储作者名称,以减少应用程序层中的连接操作