【问题标题】:Are there threaded SPARQL implementations?是否有线程 SPARQL 实现?
【发布时间】:2013-02-07 01:09:26
【问题描述】:

我们正在为每次迭代使用一组 SPARQL 查询构建迭代算法。该算法效果很好,但我们遇到了 CPU 利用率问题。像 Fuseki 这样的 SPARQL 引擎并不是真正的多线程;它们允许在多个线程中同时执行多个查询,但每个单独的查询都是单线程的。通过查看一些 Fuseki 注释,我得到的印象是 Fuseki 不是线程安全的,所以这不是一个小问题。

由于我们的算法在 SPARQL 查询方面本质上是串行的,而且我们对一次运行一个感兴趣,是否有一些 SPARQL 引擎可以利用 32 核?

【问题讨论】:

  • Fuseki 在设计上是线程安全的。如果有任何问题,请提交错误报告。
  • @AndyS,据我所知,它是多线程的,因为我可以有多个线程,每个线程都有自己的事务。但是,您不能在多个线程之间拆分相同的事务。这个jena.apache.org/documentation/tdb/tdb_transactions.html 表示对同一事务的多线程访问仅限于只读(或一个线程进行写入),因此我的评论是它不是线程安全的(至少对于我想要的)。我还注意到,引擎不会为单个查询利用多个核心,这正是我正在寻找的,因此是我的问题。

标签: rdf sparql


【解决方案1】:

是的,BigData 是一个开源/商业示例。

我自己的项目dotNetRDF 也大量使用多线程,在我的情况下,我利用 .Net PLINQ 功能来并行化连接、产品、FILTER 和 BIND 操作,尽管它们并不总是适合这个。

关于 Fuseki 的说明(免责声明我也参与了 Apache Jena 项目),因为 AndyS 指出 Fuseki 本身是线程安全的。问题是查询引擎 (ARQ) 不是为并行化操作而设计的,过去已经讨论过一些关于此的想法,但 IMO 将涉及相当大的重写。

【讨论】:

  • 我会检查 BigData。我们的机器是一个无头 Linux 机器,如果我可以避免它,我宁愿避免必须弄清楚如何在它上面安装 Windows,所以我会先检查替代方案。但似乎 dotNetRDF 可以满足我的需要。
  • 取决于你的规模,而 dotNetRDF 有一个线程引擎,它在当前的化身中只能扩展到几百万个三元组,并且是一个非持久性存储(即你必须每次都加载数据) . BigData 可能是更好的选择,尤其是对于生产场景
【解决方案2】:

由 YarcData 开发和销售的 Urika 引擎是高度多线程的(多达数千个并发线程)并且在非常大的内存中运行。不过可能不适合业余爱好者的预算。 :)

【讨论】:

  • 实际上,这个问题来自我们在他们不久前做的 YarcData 挑战赛的参赛作品时,我们确实使用了 uRiKa。但是我们想要一些东西来 A) 用于调试和 B) 将 uRiKa 与经典机器进行比较。
  • 哦,uRiKa 是一个完整的设备,而不仅仅是一个软件。该机器使用 ThreadStorm 处理器(如果您有兴趣,它是旧 XMT 的后代),它们的线程处理方式与 x86 芯片的运行方式完全不同。所以即使你有钱,你也不能真正在标准机器上使用他们的引擎。
猜你喜欢
  • 2017-08-17
  • 2017-04-09
  • 2014-04-27
  • 2014-08-24
  • 1970-01-01
  • 2011-05-17
  • 2011-08-25
  • 1970-01-01
  • 2017-02-23
相关资源
最近更新 更多