Janusgraph DB не обновляется после изменения значений свойств вершин с помощью clojure ogre - PullRequest
0 голосов
/ 07 мая 2019

Я использую Clojure / Ogre для взаимодействия с Janusgraph DB из моего приложения clojure api. Так как я очень новичок в этой технологии, я думаю, что я мог что-то упустить. Ниже приведены проблемы, с которыми я сталкиваюсь,

  • Когда я добавляю новую вершину через из моего приложения clojure, моя база данных janusgraph показывает вершину, и это ожидается. Но когда я попытался обновить свойства вершин из приложения, БД не показывает обновленный результат. Мне нужно явно открыть файл "janusgraph-cql.properties" из оболочки gremlin, тогда только в нем будет показан обновленный результат в БД.
  • Когда я запрашиваю вершину из моего приложения, используя синтаксис clojure / ogre, я получаю старые устаревшие данные даже после обновления значений свойства вершины через синтаксис clojure / ogre из приложения. Кеш хранит ранее запрошенные результаты. Когда я выполняю один и тот же оператор запроса несколько раз (в пятый раз), он показывает обновленный результат.

Я так запутался, как останавливать или обновлять кеш при обновлении любого из свойств вершины.

Пожалуйста, найдите детали ниже, Приведенный ниже запрос используется для обновления существующей вершины.

(og/traverse g (og/V)
              (og/has :name "xyz") 
              (og/property :age 32)
              (og/next!))(.commit (.tx graph))

После выполнения вышеприведенного утверждения, когда я открываю оболочку gremlin, я вижу не обновленную вершину, а только старую. Мне нужно явно открыть файл свойств, используя

graph = JanusGraphFactory.open('config/dev/janusgraph-cql.properties')

и затем, когда я запрашиваю в оболочке gremlin, отображаются новые данные.

Приведенный ниже оператор используется из приложения clojure для извлечения данных,

(og/traverse g (og/V) (og/has :name "xyz")
  (og/value-map) (og/into-list!))

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

Файл моих свойств,

gremlin.graph=org.janusgraph.core.JanusGraphFactory
storage.backend=cql
storage.hostname=127.0.0.1
storage.cql.keyspace=mygraph
cache.db-cache = true
cache.db-cache-clean-wait = 20
cache.db-cache-time = 180000
cache.db-cache-size = 0.5
index.search.backend=elasticsearch
index.search.hostname=127.0.0.1

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

1 Ответ

1 голос
/ 09 мая 2019

Если я правильно понимаю ваш порядок операций, я полагаю, что вы делаете:

  1. Запрошена вершина в Gremlin Console
  2. Обновлена ​​эта же вершина в Ogre
  3. Опросил эту вершину снова в Gremlin Console и увидел устаревшие данные

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

  1. Запрос вершины в консоли Gremlin
  2. Обновление этой же вершины в Ogre
  3. Ошибка g.tx().rollback() в GremlinКонсоль для запуска новой транзакции
  4. Снова запросила эту вершину в Gremlin Console и просмотрите обновление
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...