Обновление свойств многих ребер в JanusGraph (gremlin) происходит очень медленно - PullRequest
0 голосов
/ 18 октября 2019

Существует база данных JanusGraph с большим объемом данных, которая содержит около 600 миллионов ребер.

Каждая сторона имеет свойства "хэш" и "метка времени".

Я хочу обновить свойство "timestamp" для каждого ребра на основе свойства "hash". Однако скорость обновления очень низкая.

Вот как я построил индекс для свойства hash:

hash = mgmt.makePropertyKey('hash').dataType(String.class).cardinality(SINGLE).make()

mgmt.buildIndex('HashComposite', Edge.class).addKey(hash).buildCompositeIndex()

А вот как я обновил свойство timestamp:

g.E().has('hash', 'c2719586fb6a26d492bf65a0263a1c52f5ff6ef3').property("timestamp", timestamp).next()

На самом деле я обнаружил, что даже если я не обновляю свойство timestamp, а просто пересекаю края, скорость все равно очень низкая:

g.E().has('hash', 'c2719586fb6a26d492bf65a0263a1c52f5ff6ef3').next()

Почемускорость перемещения краев настолько медленная, когда индекс "хэш" построен?

1 Ответ

2 голосов
/ 19 октября 2019

Вы можете выполнить profile в запросе, чтобы убедиться, что индекс действительно используется:

g.E().has('hash', hash).profile()

Вы создали индекс до загрузки данных графика или после? Если после, вам следует сначала переиндексировать данные:

mgmt.updateIndex(mgmt.getGraphIndex("HashComposite"), SchemaAction.REINDEX).get()
...