Използвам следния клас util за почистване на база данни Neo4j:
public class Neo4jUtils {
final static Logger logger = LoggerFactory.getLogger(Neo4jUtils.class);
private static final int BATCH_SIZE = 1000;
public static void cleanDb(Neo4jTemplate template) {
logger.info("Cleaning database");
long deletedNodesCount = 0;
do {
GraphDatabaseService graphDatabaseService = template.getGraphDatabaseService();
Transaction tx = graphDatabaseService.beginTx();
try {
Result<Map<String, Object>> result = template.query("MATCH (n) WITH n LIMIT " + BATCH_SIZE + " OPTIONAL MATCH (n)-[r]-() DELETE n, r RETURN count(n) as count", null);
deletedNodesCount = (long) result.single().get("count");
tx.success();
logger.info("Deleted " + deletedNodesCount + " nodes...");
} catch (Throwable th) {
logger.error("Error while deleting database", th);
throw th;
} finally {
tx.close();
}
} while (deletedNodesCount > 0);
}
}
Както можете да видите, ограничих размера на партидата до 1000, но така или иначе по време на операцията по изтриване първата партида изтрива ~300 000 обекта, а останалите партиди изтриват ~2000 обекта във всяка партида.
Можете ли да ми кажете защо имам тези големи числа в случай на използване на BATCH_SIZE = 1000;
Как да поправя тази функция, за да огранича наистина размера на партидата до 1000 възли?