使用在 Docker 中运行的 TinkerPop Gremlin 存储图形数据

问题描述 投票:0回答:1

我正在尝试使用 Gremlin 服务器来处理基于图形的数据库和 docker-compose。 问题是,当我关闭或重新启动容器时,没有保存静态文件,并且图形在以下启动时为空。

我做错了什么? :(

我所做的是:

  • 为容器设置这个图像

    image: tinkerpop/gremlin-server

  • 设置容器体积

volumes:
  - gremlin_data:/opt/gremlin-server/data
  • 设置 docker-compose 卷:
volumes:
  pgdata:
  django-static:
  gremlin_data:
  • 设置 tinkergraph 以在关闭时保存图形状态:
gremlin.tinkergraph.graphLocation=/opt/gremlin-server/data/graph.kryo
gremlin.tinkergraph.graphFormat=gryo

docker docker-compose gremlin gremlin-server tinkergraph
1个回答
0
投票

问题似乎是 gremlin-server 在 docker 中运行时没有正常关闭。 TinkerGraph 主要是一个内存中的图形,它仅在图形实例关闭时保存到

gremlin.tinkergraph.graphLocation
中定义的位置。当 gremlin-server 收到 SIGINT 时,它会关闭底层的 TinkerGraph 并保存数据。

问题是运行分布式gremlin-server docker镜像时,gremlin-server不是容器中的前台进程。当容器关闭时,服务器永远不会收到正常关闭的信号,并且不会发生此保存。

我已经测试了类似于您描述的设置;如果我只是关闭容器,我的图表就不会保存。但是,如果我在容器中打开一个 shell 并运行以下命令在关闭之前向服务器发送一个 SIGINT,我的数据将保留在我的卷中。

/opt/gremlin-server $ ps
PID   USER     TIME  COMMAND
    1 gremlin   0:00 {gremlin-server.} /bin/bash /opt/gremlin-server/bin/gremlin-server.sh conf/gremlin-server.yaml
   22 gremlin   0:06 java -Dlogback.configurationFile=file:/opt/gremlin-server/conf/logback.xml -Xms512m -Xmx4096m -cp :/opt/gremlin-server/conf/:/opt/gremlin-server/lib
   55 gremlin   0:00 /bin/sh
   61 gremlin   0:00 ps
/opt/gremlin-server $ kill -INT 22 # PID of the java process (gremlin-server)

我相信这是应该在 TinkerPop 内部解决的问题。我为这样的改进创建了一个TinkerPop JIRA

© www.soinside.com 2019 - 2024. All rights reserved.