Сокращение времени завершения транзакции neo4j

От каких факторов зависит время, необходимое для transaction.finish() в neo4j?

Я использую neo4j для построения графика Facebook. Каждый Node имеет список в среднем из 500 объектов класса, содержащих:

4 Strings of max length 20 chars
1 doubles 
1 long
1 Date
1 boolean

а Relationship имеет список в среднем из 20 таких объектов.

Существует около 3 00 000 узлов и тот же порядок общих отношений.

Для таких узлов, если я обновляю около 300 узлов, я обнаружил, что обновление занимает около 50 секунд. и время транзакции около 10 мин. Использование памяти составляет около 2,5 ГБ, процессор: двухъядерный 2,93 ГГц.

Это время завершения транзакции выглядит слишком большим.

Могу ли я получить какие-либо предложения о том, как сократить время завершения транзакции?

ИЗМЕНИТЬ:

Я нашел один такой тяжелый узел, все свойства которого, объединенные вместе в виде строки, дали строку длиной 15650993 символов.


person N D Thokare    schedule 02.08.2013    source источник


Ответы (1)


В tx.finish() изменения записываются в логический журнал и принудительно записываются на диск. Затем изменения применяются к файлам хранилища базы данных, которые, скорее всего, ничего не записывают на диск, а обновляют отображаемые в памяти части этих файлов. За исключением того, что время от времени логический журнал ротируется, и все изменения в файлах хранилища базы данных также принудительно записываются на диск.

Что касается вашего свойства большой строки, я бы не ожидал, что даже 15 МБ будут такими медленными. Вы его профилировали?

person Mattias Finné    schedule 21.08.2013