Несколько версий графика
В настоящее время я работаю над приложением, которое позволяет пользователю визуально отображать данные, связанные с графиком. Затем пользователи могут вносить определенные изменения в график:
добавление связи между узлами
добавление нового узла
изменение определенных атрибутов узла
удаление ссылки
Эти изменения должны быть видны только на «настраиваемом графике», отредактированном пользователем. Пользователи могут иметь несколько «версий» графика, на который мы внесли определенные изменения.
Есть ли в Neptune какая-то функциональность, которая могла бы помочь нам достичь такой функциональности (мы также использовали Neo4j)? Мы можем видеть это как наличие нескольких представлений одного и того же графика с определенными правками.
Мой текущий подход заключается в том, чтобы хранить «правки» в отдельной базе данных (реляционной или NoSQL) и когда пользователь хочет отобразить график:
Сначала я получаю неотредактированную версию с Нептуна.
Во-вторых, мы извлекаем метаданные о пользовательских изменениях и применяем их к данным, прежде чем возвращать их во внешнее приложение.
Я хотел бы знать, была ли у кого-то подобная проблема и есть ли у вас мысли по поводу этого решения. Решение может быть похоже на сохранение событий — когда мы применяем события, чтобы получить окончательный вид графика.
2 ответа
Я думаю, что ваш подход звучит разумно. В некотором смысле это немного похоже на редактирование изображения со слоями, где фактическое изображение обновляется только тогда, когда слои зафиксированы и сведены обратно в одно изображение.
Amazon Neptune не имеет такого механизма «слоев» как такового. Таким образом, вам нужно будет каким-то образом сохранить изменения так, чтобы это управлялось приложением.
Вы можете добавить их на график, но с некоторым токеном (например, свойством или идентификатором), который, как вы знаете, является временным, а затем удалить их позже, если вы не хотите, чтобы изменения полностью сохранялись.
Если вы не хотите разрешать даже временное редактирование фактического графика, то сохранение истории изменений каким-либо другим способом, управляемым приложением, кажется здесь подходящим способом.
Простой способ отделить свой пользовательский график — использовать настраиваемые метки узлов (и, возможно, также настраиваемые типы отношений, если вы когда-либо выполняли поиск только по типу отношений).
Затем вы можете изменить свои существующие запросы, чтобы передать метки (стандартные или пользовательские), которые вы хотите использовать. См. этот ответ для предложения о том, как сделать это эффективно.
Или вы можете просто использовать другой набор запросов в зависимости от того, над каким подграфом вы хотите работать.