Несколько версий графика

В настоящее время я работаю над приложением, которое позволяет пользователю визуально отображать данные, связанные с графиком. Затем пользователи могут вносить определенные изменения в график:

  • добавление связи между узлами

  • добавление нового узла

  • изменение определенных атрибутов узла

  • удаление ссылки

Эти изменения должны быть видны только на «настраиваемом графике», отредактированном пользователем. Пользователи могут иметь несколько «версий» графика, на который мы внесли определенные изменения.

Есть ли в Neptune какая-то функциональность, которая могла бы помочь нам достичь такой функциональности (мы также использовали Neo4j)? Мы можем видеть это как наличие нескольких представлений одного и того же графика с определенными правками.

Мой текущий подход заключается в том, чтобы хранить «правки» в отдельной базе данных (реляционной или NoSQL) и когда пользователь хочет отобразить график:

  1. Сначала я получаю неотредактированную версию с Нептуна.

  2. Во-вторых, мы извлекаем метаданные о пользовательских изменениях и применяем их к данным, прежде чем возвращать их во внешнее приложение.

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

2 ответа

Я думаю, что ваш подход звучит разумно. В некотором смысле это немного похоже на редактирование изображения со слоями, где фактическое изображение обновляется только тогда, когда слои зафиксированы и сведены обратно в одно изображение.

Amazon Neptune не имеет такого механизма «слоев» как такового. Таким образом, вам нужно будет каким-то образом сохранить изменения так, чтобы это управлялось приложением.

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

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

Простой способ отделить свой пользовательский график — использовать настраиваемые метки узлов (и, возможно, также настраиваемые типы отношений, если вы когда-либо выполняли поиск только по типу отношений).

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

Или вы можете просто использовать другой набор запросов в зависимости от того, над каким подграфом вы хотите работать.

Другие вопросы по тегам