2つの大きなコレクションの間で巨大な結合を使用してグラフの一部が構築され、どちらのコレクションにドキュメントを追加するたびにも実行されます。 クエリはolder postに基づいています。ArangoDB:例文によるクエリの関数として挿入
FOR fromItem IN fromCollection
FOR toItem IN toCollection
FILTER fromItem.fromAttributeValue == toItem.toAttributeValue
INSERT { _from: fromItem._id, _to: toItem._id, otherAttributes: {}} INTO edgeCollection
これは、私のデータセットの完了に約55,000秒かかります。私はそれをより速くするための提案を絶対に歓迎する。
- 私はアップサートを必要とする:
は、しかし、私は2つの関連する問題があります。通常、
upsert
は問題ありませんが、この場合、私はキーを前もって知る方法がないので、それは私を助けません。キーを前面に出すために、私は例で照会して、そうでなければ同一で既存のエッジのキーを見つける必要があります。それは私のパフォーマンスを殺していない限り、それは合理的だと思うが、私はどのように等価なエッジがまだ存在しない場合はエッジを挿入するように条件付きでクエリを構築するAQLではわからないが、ある。これどうやってするの? - データがどちらのコレクションにも追加されるたびに、これを実行する必要があります。私はコレクション全体に参加しようとしないように、これを最新のデータでのみ実行する方法が必要です。新しく挿入されたレコードだけに参加できるAQLを書くにはどうすればいいですか?彼らはArangoimpで追加されているので、どの順番でそれらが更新されるかは保証されていないので、ノードを作成するのと同時にエッジを作成することはできません。新しいデータだけにどのように参加できますか?私は、レコードが追加されるたびに55k秒を費やしたくない。
db._explain(<your query here>);
た番組の出力を見ることによって見ることができるよう
他のデータベースでも同じ問題を抱えてクエリを実行しましたが、データセットを再リンクするときにデータセットのサイズをどのように縮小しますか。私にとっては、 'fromCollection'コレクションと' toCollection'コレクションの両方に 'linked = false'のようなフィールドを追加する方法がありました。 –
...新しい文書をいずれかのコレクションに挿入すると、常に 'linked'が' false'に設定されます。ドキュメントをリンクするときには、 'link'を' true'に設定します。それをスピードアップするために、 'linked'にインデックスを付けることもできます。すべてが値 'linked = false'を持つので、これはあなたが処理を最初に行うのがまだ遅くなりますが、処理速度が大幅に向上します。 –
あなたのためにそれを行うためにFoxxアプリを書くことができました、私は他の人の質問のためのFoxxアプリケーションの例を文書化しました、利用可能です[ここ](http://stackoverflow.com/questions/39897954/arangodb-aql-recursive-graph-トラバーサル)をStackOverflowに追加します。素早く素早く、完璧なユースケースであることを記述しているような機能があるので、Foxxを学ぶには時間をかけておく価値があります。この関数はパラメータを必要とせず、実行するだけで 'linked = false'でそれらのレコードをスキャンします。 –