Представление (и увеличение) силы отношений в Neo4j

Я хотел бы представить изменяющуюся силу связей между узлами в графе Neo4j.

Для статического графа это легко сделать, установив свойство "strength" для отношения:

  A --knows--> B
       |
     strength
       |
       3

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

Мне придется либо обеспечить, чтобы только один клиент REST читал и писал одновременно (внешняя синхронизация), либо придерживаться только встроенного API, чтобы я мог использовать встроенные транзакции. Это может быть выполнимо, но кажется неудобным.

Другим решением может быть запись нескольких отношений без каких-либо свойств, так что "сила" - это фактически количество отношений, т.е.

A knows B
A knows B
A knows B

означает отношение с силой 3.

  • Недостаток: можно записать только целочисленные силы
  • Преимущество: не требуется чтение перед записью
  • Недостаток: (возможно) требуется больше памяти
  • Недостаток: (возможно) гораздо медленнее извлекать значение, поскольку необходимо извлекать и подсчитывать несколько отношений

Кто-нибудь пробовал этот подход, и может ли он столкнуться с проблемами производительности, особенно при чтении?

Есть ли лучший способ смоделировать это?

9
задан DNA 29 April 2015 в 07:24
поделиться