如何在NoSQL中对"hasMany"进行近实时查询建模?



我一直在玩Couchbase,我正在努力寻找建立关系模型的最佳方法。

belongsTo:这相当容易。当我有帖子评论时,我可以在评论中使用以下结构。

Comment:
    id: 1
    parent: this is where I store an id of post

hasMany:一开始这似乎很容易。假设我有帖子用户,并且用户可以喜欢帖子,我有以下结构。

Posts:
    id: 1
    likedBy: [
        'user-id-1',
        'user-id-2'
    ]

这是有效的,如果我有可能…一千个赞,但随着赞数的增加。。它变得越来越慢,我不得不锁定文档。

我的第一个解决方案是使用视图,但视图并不是实时的,即使它适用于大多数查询。索引总是有延迟。

然后我考虑使用关系数据库来保存关系,我认为这可能是一个很好的选择,但我想知道是否有遗漏。

对于评论,我可能会使用这样的东西,但我会做帖子本身的ID,而不是像博客文章中那样使用"SomeEventType"和日期时间戳。通过这种方式,您可以获得该帖子的counter对象,从而获得评论数组的上限。然后,您可以遍历该列表,使用分页或对所有列表进行批量获取。由于这将纯粹与数据服务交互,因此它将满足您的一致性和实时需求。

对于点赞数量,您可以使用计数器对象。为了记录哪个用户喜欢一篇帖子或评论,你可以将其存储在一个单独的对象中,或者像你在每个用户的问题中那样有一个索引对象?让我多想想这个。

最新更新