2017-11-25 5 views
2

私の問題hereを解決するために、ArangoDbのAQL言語を使用してコレクションを2つに分割しています。グラフの作成は「正規化」されたコレクションでのみ行うことができます。しかし、私のクエリは私のRAM(16GB)のすべてを食べています。大きなAQLクエリでRAMが不足しています。コレクションを2つに分割しようとしています

FOR comment IN collection_name 
    COLLECT author = comment.author 
    , subreddit = comment.subreddit 
    WITH COUNT INTO counter 
    RETURN {author, counter, subreddit} 

結果をRAMにプルすることなく直接ディスクにダンプする方法はありますか?または、クエリを使用せずに直接分割する方法はありますか?

+0

これは、これに関連するバグである可能性があります。https://github.com/arangodb/arangodb/issues/3806 –

+0

クエリを実行する前のデータの量は? – Virmundi

答えて

2

ここでの問題は、COLLECTステートメントがメモリ内で動作することです。あなたのコレクションには4,000万のドキュメントがあり、それらのすべてで作業したいので、72.424.492のuniqアイテムを収集するとこれはうまくいかないでしょう。

1は、このサブセットを作成するためにOPTIONS { ignoreErrors: true }を使用することができ、あなたが作成望むサブセットのコレクションを作成します。

あなたauthor -fieldは、各著者に_key UNIQを作成するためにMD5()を使用することができます(私たちが識別しignoreErrors -optionとの重複をスキップする必要があります)_keyフィールドで許可されていない文字列が含まれる可能性があるため。 uniqの作成者ごとに著者のエントリを作成したクエリは、次のようになります。

db._query(` 
    FOR item IN RawSubReddits 
    INSERT { 
     _key: MD5(item.author), 
     author: item.author 
     } INTO authors 
     OPTIONS { ignoreErrors: true }`); 

あなたはこれらを持っていたら、エッジコレクションから数を更新できますgithubの上

db._query(` 
    FOR onesubred IN RawSubReddits 
    INSERT { 
     _from: CONCAT('authors/', MD5(onesubred.author)), 
     _to: CONCAT('RawSubReddits/', onesubred._key) 
    } INTO authorsToSubreddits") 

This post以上を提供することができます情報。

関連する問題