我用两个生成的集合创建了数据库:用户和注释。每个都包含约100万个文档。
以下是结构:
用户:(name
字段使用跳过列表索引):
{
"name": "Some user name"
}
注释:(authors
字段包含_key
集合中文档的users
个):
{
"title": "Some title",
"authors": [
"12345", "12346", "12347", ...
]
}
我需要在users
字段中加入authors
集合,然后按用户name
进行过滤,但这花费的时间太长。在我当地大约是3.5秒。 Specific name
值仅出现一次。
let specificUsers = (
for user in users
filter user.name == 'Specific name'
return user
)
for note in notes
let authors = (
for user in specificUsers
filter user._key in (note.authors != null ? note.authors : [])
return user
)
filter count(authors) > 0
// filter 'Specific name' in (authors[*].name) // this way takes even longer
limit 10
return merge(note, {
authors: authors
})
如果我省略了count
过滤器或对“自有”属性进行过滤,那么它的加载速度当然很快。但实际上需要对联接的集合进行过滤。就像在关系数据库中一样。
在这种情况下我做错了还是ArangoDB表现不佳?
如果需要提供更多详细信息,请告诉我。
答案 0 :(得分:0)
所以,我错过了两件事:
authors[*]
上添加索引。 (note.authors != null ? note.authors : [])
。 (我想,最好确保authors
属性始终是数组)