ユーザーが辞書を管理できるアプリケーションを構築しています。機能の 1 つは、ファイルをアップロードして、辞書のコンテンツを初期化または更新することです。
私が最初に注目している構造の部分はDictionary -[:CONTAINS]->Word
. 空のデータベース (Neo4j 1.9.4、2.0.0M5 も試しました) から始めて、分散環境で Spring Data Neo4j 2.3.1 経由でアクセスします (したがって、SpringRestGraphDatabase を使用しますが、localhost でテストします)、7k ワードをロードしようとしています。 1 辞書に。ただし、コア i7、8Gb RAM、および SSD ドライブ (ulimit が 40000 に引き上げられた) を備えた Linux では、8/9 分未満では完了できません。
REST を使用したパフォーマンスのロード/挿入に関する多くの投稿を読み、見つけたアドバイスを適用しようとしましたが、うまくいきませんでした。アプリケーションの制約により、BatchInserter ツールは適切なオプションではないようです。
数分ではなく数秒で 1 万ノードをロードできますか?
すべての私の読書の後に、私が思いついたコードは次のとおりです。
Map<String, Object> dicProps = new HashMap<String, Object>();
dicProps.put("locale", locale);
dicProps.put("category", category);
Dictionary dictionary = template.createNodeAs(Dictionary.class, dicProps);
Map<String, Object> wordProps = new HashMap<String, Object>();
Set<Word> words = readFile(filename);
for (Word gw : words) {
wordProps.put("txt", gw.getTxt());
Word w = template.createNodeAs(Word.class, wordProps);
template.createRelationshipBetween(dictionary, w, Contains.class, "CONTAINS", true);
}