Couchbase:嵌套数据层的 nosql 数据库文档设计
Couchbase: nosql db document design for nested layers of data
上下文:
我有一个包含深层嵌套信息的数据集。有5层。顶层有第二个列表,第二个有第三个列表等等。
我有不同的用户,他们将具有对所有不同数据的访问级别。 IE 顶级用户将有权访问顶层和下面的所有层。 2 级用户将有权访问第 2 级及其下的所有层,第 3 到第 3 级等等直到最底层只能访问该级别。
我目前有一个只保存顶级信息的数据库。顶层有8个文件。因此,如果 2 级或 3 级用户登录,我将获得与他们相关的 1 级数据,然后在服务器端代码中,我将数据过滤为仅用户需要的数据,然后将其发送。
问题:
我听说好的 nosql 数据库设计应该是基于服务器设计文档 api。对于我的数据,这似乎会产生大量冗余数据。例如,用户级别 5(最低级别)的数据将包含在某些级别 4 数据中,该用户的相同数据将包含在级别 3 数据中,一直向上,所有在不同的文档中。
这是我们根本不关心的 none 问题吗?还是我对这个问题的思考有误?
您应该考虑对数据的访问模式。
确实,这可能会导致数据冗余 - 但我们生活在信息时代。
这里真正关心的是您访问数据的速度。
最快的方法是每个级别一个文档 - 但是你有
- 冗余数据
- 嵌套文档
- 更新速度较慢
- 最快读取
如果您需要大量更新,+ 您需要保持一致,您可能希望将其分解为更小的文档。
这样做的方法是将文档的键设计为与父项有关系,并在父项中引用子项。
这是 Couchbase 中非常常见的操作方式,您可以根据需要选择键。
- 无冗余数据
- 多份文件,每份文件数份
- 快速更新 - 只更新一小部分
- 读取速度较慢,每个文档获取多个(如果您使用的是 N1QL,则加入)
您还可以混合搭配引用 + 嵌入 - 取决于用例。
上下文:
我有一个包含深层嵌套信息的数据集。有5层。顶层有第二个列表,第二个有第三个列表等等。
我有不同的用户,他们将具有对所有不同数据的访问级别。 IE 顶级用户将有权访问顶层和下面的所有层。 2 级用户将有权访问第 2 级及其下的所有层,第 3 到第 3 级等等直到最底层只能访问该级别。
我目前有一个只保存顶级信息的数据库。顶层有8个文件。因此,如果 2 级或 3 级用户登录,我将获得与他们相关的 1 级数据,然后在服务器端代码中,我将数据过滤为仅用户需要的数据,然后将其发送。
问题:
我听说好的 nosql 数据库设计应该是基于服务器设计文档 api。对于我的数据,这似乎会产生大量冗余数据。例如,用户级别 5(最低级别)的数据将包含在某些级别 4 数据中,该用户的相同数据将包含在级别 3 数据中,一直向上,所有在不同的文档中。
这是我们根本不关心的 none 问题吗?还是我对这个问题的思考有误?
您应该考虑对数据的访问模式。
确实,这可能会导致数据冗余 - 但我们生活在信息时代。
这里真正关心的是您访问数据的速度。 最快的方法是每个级别一个文档 - 但是你有
- 冗余数据
- 嵌套文档
- 更新速度较慢
- 最快读取
如果您需要大量更新,+ 您需要保持一致,您可能希望将其分解为更小的文档。 这样做的方法是将文档的键设计为与父项有关系,并在父项中引用子项。 这是 Couchbase 中非常常见的操作方式,您可以根据需要选择键。
- 无冗余数据
- 多份文件,每份文件数份
- 快速更新 - 只更新一小部分
- 读取速度较慢,每个文档获取多个(如果您使用的是 N1QL,则加入)
您还可以混合搭配引用 + 嵌入 - 取决于用例。