JanusGraph的能力和未来

4
我目前正在工作的项目中使用Neo4j社区版。我们处理1-5M个顶点,5-20M条边,但我们的目标是处理10-20M个顶点和50-100M条边的数据量。我们正在讨论切换到一个图数据库开源项目,以便能够按比例扩展。目前我们考虑使用Janusgraph和Cassandra。
关于Janusgraph的能力,我们有一些问题需要解答:
  • 我们使用了Janusgraph的ready-to-use docker镜像进行了一些实验,通过Java程序发出查询请求。Java程序和docker镜像在同一台机器上运行。当插入10k-20k个顶点,50k-100k条边时,查询所有具有给定属性的顶点需要花费8到10秒钟(在Java程序中执行10个相同的查询,统计平均时间,包括命令之前和之后的时间)。查询本身非常简单:g.V().has("secText", "some text").inE().outV();此外,当我尝试插入更多记录时(向100k个顶点扩展),docker镜像似乎会崩溃。我们想知道这是否是由于docker镜像的局限性,还是存在任何问题,或者这种情况是否正常?总之,它看起来非常非常慢。
  • 我们在两个不同的VM上设置了一个2节点的Cassandra集群,并使用Janusgraph进行测试,结果也很慢。
  • 从我在互联网上阅读到的信息来看,人们似乎在生产中使用Janusgraph部署了数百万个顶点,所以我猜他们可以在毫秒级别内执行简单的查询。那么秘诀是什么?你需要像128GB的RAM一样的东西才能使整个系统正确运行吗?或者可能有一些我不知道的好的实践指南吗?我尽力使用了Janusgraph的官方文档和用户在论坛上的评论,但我怕这些还不够。
关于Janusgraph的未来:
  • Janusgraph在前几年(例如2016-2018)似乎发展相当迅速,但是最近几个月我没有看到Janusgraph社区有太多的活动,除了几个月前发布的0.5版本。例如,自从去年以来就没有再举行会议。 因此,我想知道:Janusgraph是否正在正确的轨道上持续发展并将被维护多年。事情是否因COVID而放缓?还是有其他原因?
  • 在Janusgraph中考虑到向后兼容性吗?从文档中可以看出,在版本0.2 / 0.3到0.4和0.5之间有许多变化。许多内容即将过时,例如Cassandra Thrift和嵌入式。因此,在生产环境中,我们不能总是负担得起每年更新版本,更不用说在某些组件过时的情况下进行代码修改,那么Janusgraph开发人员是否想要尽快实现一些向后兼容性,或者我们应该等待1.0版本呢?

感谢您阅读这些内容,我期待着您能给我所有的答案 :) 祝您愉快!

Mael


你好,可能你的查询执行了全表扫描,请检查日志是否有类似这样的消息 WARN transaction.StandardJanusGraphTx: Query requires iterating over all vertices [()]. For better performance, use indexes 或者使用 profile() 检查你的查询。关于索引的更多信息请参考 https://docs.janusgraph.org/index-management/index-performance/。 - mad
分享一些我发现有用的博客:https://www.experoinc.com/post/have-you-had-your-janusgraph-tuneup,但是我很希望从其他专家那里获得关于在生产环境中使用这两个数据库的更多意见! - chaooder
2个回答

1
JanusGraph与Cassandra在存储层面存在设计限制,导致性能较慢。实际上,它是一个大型、可扩展但性能较慢的图形数据库,提供了Cassandra的复制和冗余优势。
Cassandra分片数据,并且非常擅长将数据随机分布在集群中,但这破坏了需要使遍历快速高效的数据本地性。JanusGraph还支持除Cassandra外的几种后端存储选项,这意味着它没有紧密调整到任何特定的存储架构。
内存可能会有所不同,因此请验证每个节点上为JVM分配了多少内存,使用G1GC并禁用交换。VisualVM有助于分析您的内存余量。

你好, 感谢您的回答。我选择Cassandra作为后端,因为它具有高可扩展性。您能否建议另一个后端,可以处理大量数据,例如10M个顶点,并且更加尊重数据本地性?此外,也许可以通过Cassandra Partitioner来解决问题?我认为当前在我的部署中使用的是Murmur3,但也许有其他更适合执行图遍历的分区器? - MaelC_fr
Neo4j不能扩展到10M个顶点吗?这似乎不应该是一个问题。您可以更改分区器,但它们都被设计为分片,并且不理解图模型。我没有使用其他后端,但值得一试。 - Brad Schoening

0

你好,我知道可能有点晚了,但请告诉我。您是访问所有顶点进行分析或事务查询吗?OLAP还是OLTP?因为您查询多少个顶点和边以及如何查询都会产生重大影响。例如,您是否告诉Janusgraph一次返回具有数百万条边的顶点或仅返回其中几个。这被称为热点顶点(具有无法存储在一个服务器实例上的大量边的顶点)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接