請仔細閱讀下面的代碼,增加了一個屬性,每個節點在任意大圖的所有元素。迭代器在事務中創建。在迭代事務過程中,創建的事務完成並創建一個新事務(以限制用於正在進行的寫操作的內存)。從這一點開始,我們繼續從該迭代器中獲取節點,但是從另一個事務中獲取節點。這個可以嗎?這些方法是否被設計爲一旦被調用就無需事務就可以工作?如何變異的Neo4j的圖形
JavaDoc包含一個神祕的警告:請注意返回的ResourceIterable
已正確關閉,並儘可能在事務內部關閉以避免可能的寫操作阻塞。顯然ResourceIterable
不能在我們完成迭代之前關閉,那麼這個警告試圖傳達什麼?
Transaction tx = database.beginTx();
try {ResourceIterable<Node> nodes = GlobalGraphOperations.at(database).getAllNodesWithLabel(label);
long i = 0L;
for (Node node : nodes) {
node.setProperty("property", "update");
i++;
if (i % commitInterval == 0) {
tx.success();
tx.close();
tx = database.beginTx();
}
}
tx.success();
}
finally {
tx.close();
}
是否有興趣Cypher支架是如何實現這一無鎖對其他線程更新模型。應該能夠在沒有開銷的情況下完成同樣的任務。 –
我不能深入瞭解如何鎖定將在這個暗號例如工作進行評論,我只知道,這是更簡單和更安全地做這種方式,並且有你沒有使用任何棄用的API – FrobberOfBits
我巨大的上漲空間可能是錯誤的,但我不認爲Cypher做任何事情來批量寫入。 –