1

次の形式で arangoDB 2.7 にデータを保存しました。

    {"content": "Book.xml", "type": "string", "name": "name", "key": 102}
    {"content": "D:/XMLexample/Book.xml", "type": "string", "name": "location", "key": 102}
    {"content": "xml", "type": "string", "name": "mime-type", "key": 102}
    {"content": 4130, "type": "string", "name": "size", "key": 102}
    {"content": "Sun Aug 25 07:53:32 2013", "type": "string", "name": "created_date", "key": 102}
    {"content": "Wed Jan 23 09:14:07 2013", "type": "string", "name": "modified_date", "key": 102}
    {"content": "catalog", "type": "tag", "name": "root", "key": 102}
    {"content": "book", "type": "string", "name": "tag", "key": 103} 
    {"content": "bk101", "type": {"py/type": "__builtin__.str"}, "name": "id", "key": 103}
    {"content": "Gambardella, Matthew", "type": {"py/type": "__builtin__.str"}, "name": "author", "key": 1031} 
  {"content": "XML Developer's Guide", "type": {"py/type": "__builtin__.str"}, "name": "title", "key": 1031}
    {"content": "Computer", "type": {"py/type": "__builtin__.str"}, "name": "genre", "key": 1031}
    {"content": "44.95", "type": {"py/type": "__builtin__.str"}, "name": "price", "key": 1031}
    {"content": "2000-10-01", "type": {"py/type": "__builtin__.str"}, "name": "publish_date", "key": 1031}
    {"content": "An in-depth look at creating applications with XML.", "type": {"py/type": "__builtin__.str"}, "name": "description", "key": 1031}

ドキュメントの数を 1000、10000、100000、1000000、10000000 のように増やしているように..平均クエリ応答時間は、ドキュメント数の増加とともに増加し、0.2 秒から 3.0 秒まで変化します。このコレクションに対してハッシュ インデックスを作成しました。私の質問は、ドキュメントの数を増やしてこれを減らすことができるかどうかです。

一方、コンテンツ コンポーネントに全文インデックスも作成しました。全文検索でも同じことが起こり、応答時間は 0.05 秒から 0.3 秒まで変化します。

それで、この時間をさらに短縮する方法があると教えてください..

応答時間をさらに短縮できることを教えてください。

4

1 に答える 1

1

FORネストされたステートメントの最初のレベルでインデックスを使用することはできません。ただし、ArangoDB 2.8 以降では、配列インデックスを利用できます。

クエリする値は次のとおりです。data.pname[*].nameそのdata.pname[*].typeため、それらのインデックスを作成できます。

db.DSP.ensureIndex({type:"hash", fields: ['data[*].type']});
db.DSP.ensureIndex({type:"hash", fields: ['data[*].name']});

次に、このインデックスを利用できるようにクエリを再作成します。簡単なバージョンから始めて実験し、Explain を使用して、実際にインデックスを使用していることを再確認します。

db._explain('FOR k IN DSP FILTER "modified_date" IN k.data[*].name RETURN k')
Query string:
 FOR k IN DSP FILTER "modified_date" IN k.data[*].name RETURN k

Execution plan:
 Id   NodeType        Est.   Comment
  1   SingletonNode      1   * ROOT
  6   IndexNode          1     - FOR k IN DSP   /* hash index scan */
  5   ReturnNode         1       - RETURN k

Indexes used:
 By   Type   Collection   Unique   Sparse   Selectivity   Fields               Ranges
  6   hash   DSP          false    false       100.00 %   [ `data[*].name` ] 
                                              ("modified_date" in k.`data`[*].`name`)

したがって、配列条件でフィルタリングできることがわかります。これにより、検査したいドキュメントのみを内側のループに入れることができます。

FOR k IN DSP FILTER "modified_date" IN k.data[*].name || "string" IN k.data[*].type
  FOR p IN k.data FILTER p.name == "modified_date" || p.type == "string" RETURN p
于 2016-02-18T11:54:51.570 に答える