0

私の新しいプロジェクトに ArangoDB を使用することを検討していますが、そのスケーラビリティに関する情報はあまり見つかりませんでした。

具体的には、count 関数に関する情報を探しています。単純なブール値に一致するコレクション内のドキュメントの数をカウントするのにかかる時間を概算する信頼できる方法 (おそらく数式) はありますか?

コレクション内のすべてのドキュメントには同じフィールドがありますが、値は異なります。数億の文書を数えるのにかかる時間をどのように判断できますか?

4

1 に答える 1

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.1mio ドキュメント) に短縮されます。

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
于 2015-08-17T12:52:36.177 に答える