Indexing “如何建模”;“有很多”;在NoSQL中进行近实时查询?

Indexing “如何建模”;“有很多”;在NoSQL中进行近实时查询?,indexing,view,relationship,couchbase,Indexing,View,Relationship,Couchbase,我一直在玩Couchbase,我试图找到建立关系模型的最佳方法 belongsTo:这相当容易。当我有帖子和评论时,我可以在评论中使用以下结构 Comment: id: 1 parent: this is where I store an id of post 有很多:起初这似乎很容易。假设我有帖子和用户并且用户可以喜欢帖子,我有以下结构 Posts: id: 1 likedBy: [ 'user-id-1', 'user-id-

我一直在玩Couchbase,我试图找到建立关系模型的最佳方法

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

Comment:
    id: 1
    parent: this is where I store an id of post
有很多:起初这似乎很容易。假设我有帖子用户并且用户可以喜欢帖子,我有以下结构

Posts:
    id: 1
    likedBy: [
        'user-id-1',
        'user-id-2'
    ]
如果我有可能是…一千个喜欢,但随着喜欢次数的增加…速度越来越慢,我必须锁定文档

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


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

对于评论,我可能会使用类似的东西,而不是博客文章中的“SomeEventType”和日期时间戳,我会自己做帖子的ID。通过这种方式,您可以获得该帖子的counter对象,它为您提供了注释数组的上限。然后,您可以遍历该列表,使用分页或对所有列表进行批量获取。因为这将纯粹与数据服务交互,所以它将满足您的一致性和实时性需求


对于喜欢的数量,可以使用计数器对象。为了记录哪些用户喜欢帖子或评论,您可以将其存储在一个单独的对象中,或者可以像每个用户在问题中一样有一个索引对象?让我仔细考虑一下这个问题。

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


对于喜欢的数量,可以使用计数器对象。为了记录哪些用户喜欢帖子或评论,您可以将其存储在一个单独的对象中,或者可以像每个用户在问题中一样有一个索引对象?让我仔细考虑一下这个问题。

我考虑过计数器,但它仍然不能解决问题,因为用户可以删除评论。它可以作为一种解决办法,但我不能说这是最好的方法。即使是喜欢的人…它也必须跟踪用户ID,而不仅仅是喜欢的人。视图可以工作,但不是实时的。我考虑过计数器,但它仍然不能解决问题,因为用户可以删除评论。它可以作为一种解决办法,但我不能说这是最好的方法。即使是喜欢的人…它也必须跟踪用户ID,而不仅仅是喜欢的人。视图可以工作,但不是实时的。