同様に、コードはインデックスを作成するためのもので、数百万のノードがそれぞれのメソッドです。これは、JSONファイルから新しいDBを作成するためのものです。単一のプロシージャ/プラグイン呼び出しで制約、インデックス、ノードを作成する方法は?
- 例外:
私は次のようなエラーが発生したスキーマの更新を実行したトランザクションでデータの更新を実行できません。単純なトランザクションを開始し、それを閉じることはできません?
- しばらくすると、CreateNodes()メソッドでセッションがクラッシュしますか?
- スキーマの作成とデータの更新をどのように分離しますか?
- 同様の回答を得ようとする前に私が投稿した質問も参照してください。しかし成功はありません。 (私はGraphDatabaseServiceとBolt Driverの両方を注入しようとしましたが、結果は同じです)。 How to use neo4j bolt session/transaction in a procedure as plugin for neo4j server extension?
for (int command = 4; command < inputNeo4jCommands.size(); command++) {
log.info(inputNeo4jCommands.get(command));
NEO4JCOMMANDS cmnd = NEO4JCOMMANDS.valueOf(inputNeo4jCommands.get(command).toUpperCase());
log.info(NEO4JCOMMANDS.valueOf(inputNeo4jCommands.get(command).toUpperCase()).toString());
if (NEO4JCOMMANDS.CONSTRAINT.equals(cmnd)) {
CreateConstraints1();
}
if (NEO4JCOMMANDS.INDEX.equals(cmnd)) {
CreateIndexes();
}
if (NEO4JCOMMANDS.MERGE.equals(cmnd)) {
log.info("started creating nodes........");
CreateNodes();
}
}
private void CreateIndexes1() {
log.info("Adding indexes.....");
log.info("into started adding index ......");
try (Transaction tx = db.beginTx()) {
log.info("got a transaction .....hence started adding index ......");
Iterator<Indx> itIndex = json2neo4j.getIndexes().iterator();
while (itIndex.hasNext()) {
Indx indx = itIndex.next();
Label lbl = Label.label(indx.getLabelname());
Iterable<IndexDefinition> indexes = db.schema().getIndexes(lbl);
if (indexes.iterator().hasNext()) {
for (IndexDefinition index : indexes) {
for (String key : index.getPropertyKeys()) {
if (!key.equals(indx.getColName())) {
db.schema().indexFor(lbl).on(indx.getColName());
}
}
}
} else {
db.schema().indexFor(lbl).on(indx.getColName());
}
tx.success();
tx.close();
}
log.info("\nIndexes Created..................Retured the method call ");
}
}
@Frank ........ JSONファイルには2つの制約と2つのインデックスしかありません。だから、今のところそれほど巨大ではない。以上、私は新鮮なデータベースでこれをやっていましたが、インデックスや制約はありません.........この質問に答える答えを教えてください... "例外:シンプルなトランザクションを開始して閉じても機能しないのですか? ......空のデータベースでもこのエラーが出る.........ありがとう。 – NeoMan
トランザクション管理規約の返信について。私はtx.success()とtx.close()のすべての可能な組み合わせを試しました........私は一緒にそれを削除しようとしました。それで、私が要求したのは.........単一の手順で制約、インデックス、ノードを使用する方法.....このエラーが発生する "例外:スキーマ更新を実行したトランザクションでデータ更新を実行できません。シンプルなトランザクションを開始して閉じても機能しないのですか? ".......... 1つの手順で3つのコマンドをすべて実行する方法を説明するサンプルをアップロードできますか? – NeoMan
例外のスタックトレースを使用すると、コード内でどこに発生しているのかを知ることができます。インデックスを読むことは "データ更新"とみなされ、2段階でコードを分割する必要があります。最初のトランザクションで作成する必要があるインデックスを見つけ、見つからないものを1秒間に作成します。 –