【发布时间】:2015-10-14 21:24:53
【问题描述】:
拥有文档集合“items”、“dictionary1”、“dictionary2”
collection "items" have 50000 records, like
{
label:"..."
dict1: "dictionary1/33333"
dict2: "dictionary2/44444"
....
}
当我用
加入字典时FOR item IN items
LET dictname = FIRST(FOR d IN dictionary1 FILTER d._id == item.dict1 RETURN d.name)
RETURN { _id: item._id, name: item.name, dict: dictname }
查询执行时间 ~ 150 毫秒对于这个简单的任务来说已经很长了。 对于实验,我是一个 _id 的强制字典
FOR item IN items
LET dictname = FIRST(FOR d IN dictionary1 FILTER d._id == "dictionary1/10000" RETURN d.name)
RETURN { _id: item._id, name: item.name, dict: dictname }
查询执行时间 ~ 130ms
我也是一个尝试过的 DOCUMENT 函数
FOR item IN items
LET dictname = DOCUMENT("dictionary1", "dictionary1/10000")
RETURN { _id: item._id, name: item.name, dict: dictname.name }
查询执行时间 ~ 1500ms :((
从集合中简单读取:
FOR item IN items
RETURN { _id: item._id, name: item.name }
查询执行时间 ~ 30ms
所以当我通过 _id 50000 次获得相同的文档作为连接时,结果没有被缓存。 一个集合中有重复内容的变体对我没有用。 现在我将逻辑移动到客户端,选择内存中的所有字典并在查询后加入,大约有 60 毫秒,但我不喜欢这种方法,它错了。
有什么方法可以在短时间内获得加入字典的结果(80% 相同的_id)?
【问题讨论】:
-
答案是否满足您的需求?如果没有,缺少什么?如果,你能把它标记为接受吗?
标签: database performance arangodb aql