如何解决N1QL键值运算与查询
现在,我正在尝试确定哪种方法可以更有效地解决我遇到的问题。情况如下:
问题陈述 我有一组要更新/插入到我的Couchbase数据库中的对象。如果它们已经在数据库中,则应更新除一个字段以外的所有字段。如果它们不在数据库中,则应将其插入。我有一个工作参数化的Merge语句,它可以执行我想要的操作,在该语句中,它接受对象数组作为参数并相应地进行更新/插入。但是我想知道,是运行单个查询的效率更高,还是更好地遍历数组,并为每个对象运行Get()键值操作,以查看每个对象是否存在于其中? db,然后运行insert()函数?
不幸的是,我对数组的大小没有很好的估计,但是我知道的是,如果有帮助的话,这项工作将不会非常频繁地运行。预先感谢您的帮助!
解决方法
通常,如果您知道密钥,如vsr所指出的那样,使用KV服务会更有效。
在这种特定情况下,您正在做一些稍微偏离常规的操作,因此请回答“效率更高吗?”可能取决于您使用的文档。
您可以尝试使用KV服务。测量并查看其性能是否优于N1QL查询。
步骤1:使用子文档操作仅获取要保留其值的字段。如果找到该文档,请记住结果中的CAS值,然后转到 STEP 3 。否则,请转到 STEP 2 。
第2步:该文档不存在,因此请尝试将其插入。如果插入成功,则说明您完成了!否则,如果由于文档存在而导致插入失败(其他人在您之前插入了文档),请转到 STEP 1 。
第3步:获取在STEP 1中检索到的现有字段值,并将其合并到文档中。然后使用CAS值进行替换操作。如果由于CAS不匹配而导致替换失败(其他人在您之前修改了文档),请转到步骤1 。
或者...如果您知道您的文档最多可以包含16个顶级字段,则可以在一个子文档操作中完成整个更新。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。