如何使用 Gremlin 提高最短路径的性能?

2023-12-02

我正在使用 JanusGraph 和 Gremlin 以及this数据集包含 2.6k 个节点和 6.6k 个边(两侧各 3.3k 个边)。我已经运行查询 10 分钟但没有找到最短路径。

使用 Gephi,最短路径几乎是瞬时的。

这是我的查询:

g.V(687).repeat(out().simplePath()).until(hasId(1343)).path().limit(1)

With simplePath()您的查询仍然处理比必要的更多的路径。例如,如果688是直接邻居687,而且也是邻居1000,与另一条路径相距 10 跳,为什么您要遵循从1000 to 688,您是否很早就见过这个十字路口?

因此,您应该过滤掉以前见过的任何十字路口(第一次出现的总是最接近的):

g.V(687).store('x').
  repeat(out().where(without('x')).aggregate('x')).
   until(hasId(1343)).limit(1).path()

另请注意,我交换了limit(1) and path;这是因为首先收集所有路径然后只采用第一个路径会浪费资源(CPU 和内存)。

UPDATE:

如果其他人想尝试一下,这里是将数据集加载到 TinkerGraph 中的代码:

g = TinkerGraph.open().traversal()
"http://nrvis.com/download/data/road/road-minnesota.zip".toURL().withInputStream {
  new java.util.zip.ZipInputStream(it).with {
    while (entry = it.getNextEntry()) {
      if ("road-minnesota.mtx" == entry.getName()) {
        it.eachLine {
          if (it ==~ /[0-9]+ [0-9]+/) {
            def (a, b) = it.split()*.toInteger()
            g.V(a).fold().
              coalesce(unfold(), addV().property(id, a)).
              addE("road").
                to(V(b).fold().coalesce(unfold(), addV().property(id, b))).inV().
              addE("road").to(V(a)).iterate()
          }
        }
        break
      }
      it.closeEntry()
    }
  }
}

以及查询和一点基准:

gremlin> g.V(687).store('x').
......1>   repeat(out().where(without('x')).aggregate('x')).
......2>    until(hasId(1343)).limit(1).
......3>   path().by(id)
==>[687,689,686,677,676,675,673,626,610,606,607,608,735,732,733,730,729,734,737,738,739,742,786,816,840,829,815,825,865,895,872,874,968,983,1009,1044,1140,1142,1148,1219,1255,1329,1337,1339,1348,1343]

gremlin> clock (100) {
......1>   g.V(687).store('x').
......2>     repeat(out().where(without('x')).aggregate('x')).
......3>      until(hasId(1343)).limit(1).
......4>     path().iterate()
......5> }
==>12.5362714

TinkerGraph 上的 12.5 毫秒对我来说看起来相当不错。预计 JG 上的运行时间会长一点,但肯定不会超过 10 分钟。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Gremlin 提高最短路径的性能? 的相关文章

  • 加权图的 BFS 算法 - 寻找最短距离

    我看过很多帖子 即 post1 https stackoverflow com questions 30409493 using bfs for weighted graphs post2 https cs stackexchange co
  • 适用于 AWS 区域的 Cassandra Ec2MultiRegionSnitch 或 GossipingPropertyFileSnitch

    我们在美国 AWS 区域有 3 个 Cassandra 节点 在新加坡 AWS 区域有 3 个节点 如果我必须构建多数据中心 我们是否必须使用 Ec2MultiRegionSnitch 或者我们可以使用 GossipingPropertyF
  • 使用 matplotlib.animation 从 CSV 文件实时绘图 - 数据绘制到第一个输入错误

    我正在尝试绘制来自不断写入 CSV 文件的传感器的数据 虽然成功创建实时绘图 但每个新数据条目都会创建一条延伸到第一个数据条目的附加线 见下文 Python 3 4 脚本 import matplotlib pyplot as plt im
  • Cassandra Nodetool Repair 的具体作用是什么?

    From http docs datastax com en cassandra 2 0 cassandra operations ops repair nodes c html http docs datastax com en cass
  • 我可以在 Cassandra 2.1 中对集合进行多重查询吗?

    在 Cassandra 2 1 中 我们可以通过在列上创建二级索引来查询集合 cqlsh play gt select from songs where tags contains t1 id tags title e99f8f30 d21
  • 为什么我的 Python 散点图不起作用?

    我使用 pylab 创建了一个非常简单的散点图 pylab scatter engineSize fuelMile pylab show 该程序的其余部分不值得发布 因为正是该行给我带来了问题 当我将 散点 更改为 绘图 时 它会绘制数据图
  • 性能 - TTL 与在 Cassandra 中删除一行

    我们有大量数据写入 cassandra 中的数百万行 我们还有一个调度程序 需要处理这些记录并在处理成功后将其删除 想知道处理后删除行还是用 TTL 标记行 本质上是延迟删除 Deletion 与 TTL 对于 Cassandra 性能有何
  • 用于图形操作的 Javascript 库

    有没有建议的 javascript 替代 pythonpygraph http code google com p python graph or NetworkX http networkx lanl gov 应该注意的是 可视化不是必需
  • Flot 0.8.2 折线图 - 颜色错误

    我正在使用 Flot 折线图并设置它们的颜色 我发现了一个奇怪的错误 在前 3 种颜色之后 绘图对所有其他线条使用最后一种颜色 这不是正确的行为 更有趣的是图例显示了正确的颜色 这是一个已知的错误 var dataSet label d1
  • 根据统计数据获取cassandra中的数据点

    我正在测试 Cassandra 2 0 作为存储时间序列数据的可能替代品 我制作了一个简单的表并将一些数据转储到其中 CREATE TABLE DataRaw channelId int sampleTime timestamp value
  • Elasticsearch 与 Cassandra 对比 Elasticsearch 与 Cassandra

    我正在学习 NoSQL 并正在寻找满足客户要求之一的不同选项 在提出这个问题之前我已经查阅了各种资源 一个对NoSQL知之甚少的人 我需要以更快的速度存储数据并读取数据 完全故障安全且易于扩展 能够搜索数据进行分析 我最终得到了一个简短的清
  • Cassandra 查询失败(墓碑)

    所以这让我发疯 我尝试查询 Cassandra 中的一张表 结果显示查询失败 我尝试深入探究其背后的原因 发现这是因为墓碑 我将 GC GRACE SECONDS 更改为零并使用 nodetool 触发了压缩 当我再次查询时它工作正常 然而
  • 计算 Adamic-Adar 的快速算法

    我正在研究图形分析 我想计算一个 N N 相似度矩阵 其中包含每两个顶点之间的 Adamic Adar 相似度 为了概述 Adamic Adar 让我从以下介绍开始 给定邻接矩阵A无向图的G CN是两个顶点的所有公共邻居的集合x y 两个顶
  • Python 3.x 中的绘图

    在Python 2 6中 我使用matplotlib制作了一些简单的图表 但是 它与 Python 3 1 不兼容 有哪些替代模块可以完成相同的事情而不非常复杂 您说您想创建一些简单的图表 但没有真正说明您想要多简单或哪种类型的图表 只要它
  • 为什么从 Cassandra CLI 教程中进行剪切和粘贴不起作用?

    盲目跟风http wiki apache org cassandra Cas sandraCli http wiki apache org cassandra CassandraCli 有人可以解释一下吗 aaron mac apache
  • 如何使 R barplot 上的列标签变为斜体

    这可能是一个简单的问题 但是如何仅将条形图上的列标签设为斜体 而不是斜体x axis标签 但列标签是专门的 到目前为止我的代码是 bp barplot means names arg c CON TRI ylim c 0 120 ylab
  • float:使所有 Y 轴的刻度线对齐

    我有一个流程图 除了第一个 Y 轴之外 还使用具有不同数字刻度的辅助 Y 轴 我的问题是辅助刻度标签与第一个浮动轴制作的网格线不对齐 Flot 似乎正在运行一些内部算法来决定为轴显示多少个刻度标签 它对每个轴分别执行此操作 从而产生了我遇到
  • 如何使用 DataStax java 驱动程序增加 cassandra 中的每秒事务数 (TPS)

    设置 2 节点 Cassandra 2 0 7 31 集群 副本 1 DataStax java 驱动程序 2 0 Problem 我正在使用 Datastax java 驱动程序进行负载平衡 我并通过 Jmeter 生成 50000 线程
  • 如何在 MATLAB 中绘制 3D 曲面图?

    我有一个像这样的数据集 0 1 0 2 0 3 0 4 1 10 11 12 13 2 11 12 13 14 3 12 13 14 15 4 13 14 15 16 我想在 matlab 中绘制 3D 曲面图 使列标题位于 y 轴 行标题
  • Cassandra java驱动程序协议版本和连接限制不匹配

    我使用的java驱动程序版本 2 1 4卡桑德拉版本 dsc cassandra 2 1 10cql 的输出给出以下内容 cqlsh 5 0 1 Cassandra 2 1 10 CQL spec 3 2 1 Native protocol

随机推荐