gpt4 book ai didi

arangodb - 为什么arangodb中的排序很慢?

转载 作者:行者123 更新时间:2023-12-01 12:41:44 25 4
gpt4 key购买 nike

我正在试验看看 arangodb 是否适合我们的用例。我们将拥有大量具有相同模式(如 sql 表)的文档。

为了尝试一些查询,我插入了大约 9 万个文档,这个数量很少,因为我们预计文档数量在 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 不适合这些情况?

最佳答案

如果 ArangoDB 需要对所有文档进行排序,这将是一个相对较慢的操作(与不排序相比)。所以我们的目标是完全避免排序。ArangoDB 有一个 skiplist 索引,它使索引值按排序顺序排列,如果可以在查询中使用它,它将加快查询速度。

目前有一些问题:

  1. 没有 FILTER 条件的 AQL 查询不会使用索引。
  2. skiplist 索引适用于前向遍历,但它没有后向遍历功能。

这两个问题似乎都影响了您。我们希望尽快解决这两个问题。

目前有一种变通方法可以使用 AQL 查询以正向顺序强制使用索引,如下所示:

FOR a IN 
SKIPLIST(test_collection, { ARTICLE_INTERNALNR: [ [ '>', 0 ] ] }, 0, 10)
RETURN { nr: a.ARTICLE_INTERNALNR }

以上通过 ARTICLE_INTERNALNR 上的索引获取前 10 个文档,条件为“value > 0”。我不确定是否有限制向后排序的解决方案。

关于arangodb - 为什么arangodb中的排序很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23909938/

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