3

I have an entity in my system which will have a lot of comments added against it in a short period of time.

Would I be correct in saying that if I read a document and then modify something in it, the entire object is then persisted back to the store?

If this is correct, then loading and storing an object with 5000 comments just so that I can add a comment seems like a bit too much?

Should I store each comment as a document and then scan through the document collection for a particular key? I would also need to be able to quickly find a comment and modify it.

4

1 回答 1

1

一份海量文件

如果您想将所有评论存储在一个文档中,您会遇到一些问题:

  • 并发写入——您将不得不进行大量读取和重试操作(非当前 Etag)
  • 加载大文档以添加评论
  • 加载大型文档以编辑评论

优点:

  • 您可以在一次操作中删除包含所有文档的主要对象

多个集合

我猜最好的选择是将评论和主要对象分成两个集合,并通过 id 将每个评论链接到主要对象。通过这种方式,您可以添加和编辑单个评论以及通过查询检索所有文档。例如,通过这种方式,您可以对评论集合运行更复杂的查询 - 获取用户的所有评论等。

缺点:

  • 删除带有所有评论的主要对象将非常昂贵(您必须逐个删除评论)

虽然您必须知道OrderBy子句尚不支持,但您可能在检索最后 10 条评论等时遇到问题。

可能的替代方案

不确定您必须支持哪些其他操作/查询。但如果它只是 CRUD,检索主对象的评论列表并可能获得最后 x 条评论,您可以考虑使用 Azure Table,其中:

  • 行键 - 基于时间的标识符(Unix 纪元)+ GUID 以避免冲突
  • 分区键 - 主要对象 ID

这样,您可以非常快速地检索和更新评论实体,以及按时间查询它

于 2014-11-07T17:14:50.913 回答