異なるサイズのデータセット、100万〜10億のエッジ(頂点あたり10個のエッジ)でJavaクエリをテストしています。 クエリは多くのデータ、対応するエッジを持つ10〜20の頂点を返しませんが、データセット全体をスキャンする必要があります。neo4j java query DBで巨大なスローダウン> 32G
データベースのサイズが32ギガバイトを超えると、パフォーマンスが大幅に低下することがあります。 私は96GにJavaのヒープサイズを変更し、ガベージコレクタのオプションでプレイ(保持-XX:+ UseG1GC最も向上オプションとして) 良好な結果を得るが、私はまだ性能に大きなディップを取得します
100Mエッジをデータベースは7.5Gです:クエリは12分を要します 250Mエッジ、データベースは19G:35分 500Mエッジ、データベースは38G:-XX:+ UseG1GCを使用して12時間 1Bエッジ、データベースは76G:-XXなしの51時間: + UseG1GC
さらに、500万回と10億回のテストでは、操作の大部分がシステム操作60%対ユーザー操作40%(上位のlinuxコマンドから)であることがわかります。小さなテストを実行すると、操作の100%はユーザーの操作です。
neo4jのentreprise版のJava GCの改善は、より小さいものと同じ割合で大きなデータセットクエリのパフォーマンスを引き出すのに十分なほど重要ですか? 大規模なデータセットクエリのパフォーマンスを向上させるためにできることはありますか?
TKS
私は32コア244 RAMの仮想サーバー上のすべてのこれらのテストを実行します。
また、私はページキャッシュのサイズを増やそうとしましたが、改善は見られませんでした。
ユースケース: 私はデータのパターンを検索しています。クエリはすべてのデータセットをスキャンして、特別なパターンの関係を持つ4つまたは5つのノードを検索します。
クエリはスレッドで実行されるため、32コアはすべて同時に実行されます。
私は変更しようとしました: - スレッド あたりのノード数 - ヒープサイズ - キャッシュサイズ - GCオプション
ではなく、多くの改善を。 これはJavaの制限ですか? ありがとう
は、データモデルと使用例を示し、いくつかのサンプルコード。それ以外の場合は、十分な情報がありません。 – cybersam
はサイバーサムに同意します。また、ハードウェアはデータセットのサイズに対応していますか? –
照会を調整するにはEXPLAIN、PROFILEを参照してください(または必要に応じて索引を作成してください) –