代码之家  ›  专栏  ›  技术社区  ›  discodane

Couchbase:嵌套数据层的nosqldb文档设计

  •  0
  • discodane  · 技术社区  · 10 年前

    上下文 :

    我有一个包含深度嵌套信息的数据集。有5层。顶层有第二层的列表,第二层有第三层的列表等等。

    我有不同的用户,他们可以访问所有不同的数据。IE顶级用户可以访问顶层和所有底层。第二级用户将有权访问第二级,其下面的所有层、第三层到第三层,以此类推,直到最底层用户只能访问该级。

    我目前有一个数据库,它只保存顶级信息。顶层有8个文档。因此,如果一个2级或3级用户登录,我会得到与他们相关的1级数据,然后在服务器端代码中,我只过滤用户需要的数据,然后将其发送出去。

    问题 :

    我听说好的nosqldb设计应该是基于服务器api设计文档。用我的数据,这似乎会产生大量冗余数据。例如,用户级别5(最低级别)的数据将包含在某些级别4的数据中,而用户级别3的数据将一直包含在不同的文档中。

    这是一个我们根本不关心的问题吗?还是我对这个问题的想法错了?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Roi Katz    10 年前

    您应该考虑数据的访问模式。

    的确,它可能会导致冗余数据,但我们生活在信息时代。

    这里真正关心的是您想要访问数据的速度。 最快的方法是为每个级别创建一个文档,但您必须

    • 冗余数据
    • 嵌套文档
    • 更新速度较慢
    • 最快的读取速度

    如果你需要大量的更新,+你需要它的一致性,你可能想把它分解成更小的文档。 这样做的方法是将文档的键设计为与父级有关系,并引用父级中的子级。 这是Couchbase中非常常见的操作方式,因为您可以随意选择钥匙。

    • 无冗余数据
    • 一份文件,每份文件几份
    • 快速更新-仅更新小部分
    • 读取速度较慢,每个文档有几个get(如果使用N1QL,则可以加入)

    您还可以根据用例混合和匹配引用+嵌入。

    推荐文章