gpt4 book ai didi

node.js - 使用对象结构的对象进行慢速 n1ql 查询

转载 作者:太空宇宙 更新时间:2023-11-03 23:23:53 24 4
gpt4 key购买 nike

在我们的 couchbase 数据库中,我们有一个包含相对较大对象的存储桶。这些物体里面还有其他物体,比如人。这应该是一个数组,但是由于某种原因,我们必须将其创建为对象的对象,如下所示:

{
"companyName": "company name",
"companyid": "11111-GUID-11111",
"people": {
"22222-GUID-22222": {
"peopleid": "22222-GUID-22222",
"name": "name1"
},
"33333-GUID-33333": {
"peopleid": "33333-GUID-33333",
"name": "name2"
},
"44444-GUID-44444": {
"peopleid": "44444-GUID-44444",
"name": "name3"
}
}
}

它还有具有类似结构的子对象。

我可以像这样对此文档进行查询:

SELECT c.*
FROM companies c
WHERE ANY v IN OBJECT_VALUES(c.people) SATISFIES v.peopleid = "22222-GUID-22222" END
LIMIT 100
OFFSET 40000;

我有一个存储桶,里面有 50000 个这样的文档。

上面的查询运行完美,并给出了正确的响应,但我必须等待大约 25 秒才能得到响应。

是否有可能在此结构上创建适当的索引?或者有什么解决方案可以加快查询速度?

最佳答案

您可以尝试按照描述创建数组索引https://developer.couchbase.com/documentation/server/current/n1ql/n1ql-language-reference/indexing-arrays.html 。您提到大对象请检查数组索引键大小限制。

创建索引 ia1 ON 公司(DISTINCT ARRAY v.peopleid FOR v IN OBJECT_VALUES(people) END);

当您使用大偏移量时,您会丢弃大量文档。如果您使用的是 4.6.2+(因为它可以使用上面链接中描述的隐式覆盖数组索引),您可以使用覆盖查询获取 LIMIT 文档的 META().id 并获取所需的文档,如下所示。

SELECT c.* FROM
(SELECT RAW META(c).id FROM companies c
WHERE ANY v IN OBJECT_VALUES(c.people)
SATISFIES v.peopleid = "22222-GUID-22222" END
LIMIT 100 OFFSET 40000) AS q
JOIN companies c ON KEYS q ;

关于node.js - 使用对象结构的对象进行慢速 n1ql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46711972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com