簡體   English   中英

為什么在arangodb中排序緩慢?

[英]Why is sorting in arangodb slow?

我正在嘗試查看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有一個跳過列表索引,該索引將索引值保持在已排序的順序,並且如果可以在查詢中使用它,則將加快查詢速度。

目前有一些陷阱:

  1. 沒有FILTER條件的AQL查詢將不使用索引。
  2. skiplist索引適用於前向遍歷,但沒有后向遍歷功能。

這兩個問題似乎都影響了您。 我們希望盡快解決這兩個問題。

目前,有一種變通方法可以強制使用AQL查詢以向前順序使用索引,如下所示:

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

上面的代碼通過條件為“值> 0”的ARTICLE_INTERNALNR上的索引選取了前10個文檔。 我不確定是否有解決方案以限制向后排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM