Постоянное хранение в JanusGraph с использованием Cassandra - PullRequest
1 голос
/ 10 марта 2020

Я играю с бэкэндом JanusGraph и Cassandra, но у меня есть некоторые сомнения.

У меня на моей машине запущен сервер Cassandra (используется Docker), и в моем API у меня есть такой код:

 GraphTraversalSource g = JanusGraphFactory.build()
        .set("storage.backend", "cql")
        .set("storage.hostname", "localhost")
        .open()
        .traversal();

Затем через мой API я сохраняю и извлекаю данные с помощью Gremlin. Он работает нормально, и я вижу данные, сохраненные в базе данных Cassandra.

Проблема возникает, когда я перезагружаю свой API и пытаюсь получить данные. Данные все еще хранятся в Cassandra, но запрос JanusGraph возвращает пустой. Почему?

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

РЕДАКТИРОВАТЬ

Вот как я добавляю элемент:

 Vertex vertex = g.addV("User")
          .property("username", username)
          .property("email", email)
          .next();

И чтобы получить все :

List<Vertex> all = g.V().toList()

1 Ответ

3 голосов
/ 10 марта 2020

Подтвердите свои транзакции

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

Вы можете просто сделать это, вызвав:

g.tx().commit();

после того, как вы итерировали свой обход с модификациями (addV() обход в вашем случае).

Без фиксации изменения доступны только локально в вашей транзакции. При перезапуске Docker контейнера (ов) все данные будут потеряны, поскольку вы их еще не зафиксировали.

Рекомендуемый подход: подключение через удаленное соединение

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

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

Документы JanusGraph содержат раздел о , как подключиться к серверу JanusGraph с Java но важной частью является этот код для создания источника обхода графа g, подключенного к вашему серверу (-ам) JanusGraph:

Graph graph = EmptyGraph.instance();
GraphTraversalSource g = graph.traversal().withRemote("conf/remote-graph.properties");

Конечно же, вы можете запустить JanusGraph Server также как контейнер Docker:

docker run --rm janusgraph/janusgraph:latest

Дополнительную информацию об изображении JanusGraph Docker и о том, как его можно настроить для подключения к бэкэнду Cassandra, можно найти здесь .


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

Постоянное хранилище с Docker Контейнеры

JanusGraph сохраняет данные в вашем бэкэнд хранения, который Кассандра в вашем случае. Это означает, что вы должны убедиться, что Кассандра сохраняет данные. Если вы запускаете Cassandra в контейнере Docker, вам нужно смонтировать том, где Cassandra хранит данные, чтобы сохранить их после перезапуска контейнера. В противном случае данные будут потеряны, как только вы остановите контейнер Cassandra.

Для этого вы можете запустить контейнер Cassandra, например, так:

docker run -v /my/own/datadir:/var/lib/cassandra -d cassandra

, где /my/own/datadir - это каталог вашей хост-системы, где вы хотите хранить данные Cassandra. Это объясняется в документах официальной Кассандры Docker image под Предостережениями > Где хранить данные .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...