我正在试验看arangodb是否适合我们的用例。 我们将拥有大量具有相同模式的文档集合(如sql表)。
为了尝试一些查询,我已经插入了大约90K的文档,这些文档很少,因为我们希望文档数量大约为100万。
现在我想获得这些文档的简单页面,不需要过滤,但需要降序排序。
所以我的aql是:
for a in test_collection
sort a.ARTICLE_INTERNALNR desc
limit 0,10
return {'nr': a.ARTICLE_INTERNALNR}
当我在AQL编辑器中运行它时,它需要大约7秒,而我预计会有几毫秒或类似的东西。
我尝试在其上创建哈希索引和跳转列表索引,但这没有任何效果:
db.test_collection.getIndexes()
[
{
"id" : "test_collection/0",
"type" : "primary",
"unique" : true,
"fields" : [
"_id"
]
},
{
"id" : "test_collection/19812564965",
"type" : "hash",
"unique" : true,
"fields" : [
"ARTICLE_INTERNALNR"
]
},
{
"id" : "test_collection/19826720741",
"type" : "skiplist",
"unique" : false,
"fields" : [
"ARTICLE_INTERNALNR"
]
}
]
那么,我错过了什么,或ArangoDB不适合这些情况?
答案 0 :(得分:3)
如果ArangoDB需要对所有文档进行排序,这将是一个相对较慢的操作(与不排序相比)。因此,目标是避免排序。 ArangoDB有一个跳转列表索引,它按索引的顺序保存索引值,如果可以在查询中使用它,它将加快查询速度。
目前有一些陷阱:
这些问题似乎都影响了你。 我们希望尽快解决这两个问题。
目前有一种解决方法可以使用AQL查询强制使用转发顺序中的索引,如下所示:
FOR a IN
SKIPLIST(test_collection, { ARTICLE_INTERNALNR: [ [ '>', 0 ] ] }, 0, 10)
RETURN { nr: a.ARTICLE_INTERNALNR }
以上通过ARTICLE_INTERNALNR上的索引以条件“值> 0”获取前10个文档。我不确定是否存在向后排序的解决方案。