我仍在争论走哪条路,并可能将某些信息存储在自己的文档中。因此,例如,客户可以拥有每个地址的地址,每个地址都是它自己的文档,然后在客户文档中,地址下会存储一个引用键数组。好处是我可以简单地根据键值更新这些文档,而不必先获取客户文档,找到地址的数组索引,然后修改整个文档或使用 subdoc 替换数组的内容与索引。我卡住的地方是如何检索那些引用的子文档。N1QL 是唯一的方法还是 KV API 提供了一种方法来完成此操作,而不是检索整个客户文档,然后通过地址数组循环并以这种方式检索所有引用的文档。我知道 Ottoman 提供了类似的功能,但我在使用最新版本的 SDK 2.6 和 Ottoman 时遇到问题,因为它维护得不是很好。所以希望有人可以分享一些见解,什么以及为什么它是最好的方法。
问问题
85 次
1 回答
2
如果您想依赖键/值,那么您需要按照您的描述进行多重查找。我对 Ottoman 不是很熟悉:它可能会为您执行此操作,但在幕后它仍然是多个键/值操作和/或 N1QL。
使用 N1QL,您可以执行 JOIN,但同样,在幕后它最终将通过键/值提取文档。它只是为您完成这些额外的步骤。直接键/值总是最快的路线。
如果您仍在决定是在多个文档中拆分数据还是将数据“非规范化”到单个文档中,您应该考虑的一件事是您将多长时间一起访问客户+地址以及多长时间您将分别访问客户/访问。如果您经常读/写客户+地址,请考虑将其放在一个文档中。否则,请考虑将其放入多个文档中。
第三种选择是将其存储在两个地方,或者更确切地说,将地址数据“缓存”在客户文档中。这很棘手,因为如果您不小心,它可能会不同步。所以在你走这条路之前确保它是值得的。
于 2019-02-06T02:23:45.927 回答