2015-06-14 61 views
0

我正在考慮使用ArangoDB來開發我的一個新項目,但我一直無法找到有關其可擴展性的很多信息。如何估算ArangoDB計數函數的執行時間

具體而言,我正在尋找一些關於計數功能的信息。有一種可靠的方法(可能是一個公式)來估計一個集合中與簡單布爾值相匹配的文檔數量需要多長時間?

集合中的所有文檔將具有相同的字段,但具有不同的值。我怎樣才能確定計算幾億份文件需要多長時間?

+0

只是做它,並算它... –

回答

3

只需創建一個集合users並根據需要插入儘可能多的隨機文檔。

FOR i IN 1..1100000 
INSERT { 
    name: CONCAT("test", i), 
    year: 1970 + FLOOR(RAND() * 55), 
    gender: i % 2 == 0 ? 'male' : 'female' 
} IN users 

然後做計數:

FOR user IN users 
    FILTER user.gender == 'male' 
    COLLECT WITH COUNT INTO number 
RETURN { 
    number: number 
} 

如果您在生產中使用此查詢,請務必添加一個索引了。在我的機器上,它將執行時間縮短大於100倍(0.043秒/1.1毫米文檔)。

用EXPLAIN檢查您的查詢以進一步估計執行的「昂貴」程度。

Query string: 
FOR user IN users 
    FILTER user.gender == 'male' 
    COLLECT WITH COUNT INTO number 
    RETURN { 
    number: number 
    } 

Execution plan: 
Id NodeType   Est. Comment 
    1 SingletonNode   1 * ROOT 
    8 IndexRangeNode 550001  - FOR user IN users /* hash index scan */ 
    5 AggregateNode   1  - COLLECT WITH COUNT INTO number /* sorted*/ 
    6 CalculationNode  1  - LET #4 = { "number" : number } /* simple expression */ 
    7 ReturnNode    1  - RETURN #4 

Indexes used: 
Id Type Collection Unique Sparse Selectivity Est. Fields  Ranges 
    8 hash users  false false    0.00 % `gender` [ `gender` == "male" ] 

Optimization rules applied: 
Id RuleName 
    1 use-index-range 
    2 remove-filter-covered-by-index