使用Camel在芝麻中索引约300.000三倍

时间:2013-12-18 16:41:44

标签: apache-camel rdf sesame

我有一个Camel上下文,配置为对输入数据进行一些操作以构建RDF三元组。

有一个处理器的最终路由,使用Sesame Client API,与一个单独的Sesame实例(在Tomcat上运行3GB内存)进行通信,并发送add命令(每个命令包含大约5-10个语句)。

处理器作为单例运行,相应的“from”端点有10个concurrentConsumers(我尝试过1,然后是5,然后是10 - 更多的相同行为)。

我正在使用处理器中的HttpRepository发送添加命令,并且在运行时,我观察到索引中的(快速且)渐进性能下降。整个过程开始非常快速地索引三元组,但是在一点点之后,提交的语句变得非常缓慢。

在芝麻方面,我使用了MemoryStore和NativeStore,但(性能)行为看起来更无可救药。

问题:

  • 如果我想加快索引阶段,建议使用哪种商店类型?
  • Repository.getConnection是否正在进行某种连接池?换句话说,每次“添加”处理器工作时,我可以打开和关闭连接吗?
  • 说过我首先需要创建一个商店将是所有这些三元组,是否首选创建一个“本地”Sail商店而不是由远程Sesame服务器管理(因此我不会使用HTTPRepository)?

1 个答案:

答案 0 :(得分:2)

我假设您正在使用4或5个语句的事务添加是有充分理由的,但是如果您有办法进行更大的交易,那么这将显着提高速度。理想(和最快)将是在一次交易中将所有300,000三元组发送到商店。

您的问题,按顺序:

  • 如果你只存储300,000个语句,那么商店的选择并不重要,因为本机和内存都可以很快地轻松处理这种规模。我希望内存存储的性能稍微高一些,特别是如果你将其配置为使用非零同步延迟进行持久化,但本机内存占用较少,当然更强大。

  • HTTPRepository.getConnection不会汇集实际的RepositoryConnection本身,而是在内部池资源(因此汇集了Sesame内部使用的实际HttpConnections)。因此getConnection相对便宜,打开和关闭多个连接也很好 - 尽管您可能会考虑重复使用相同的连接进行多次添加,以便您可以在单个事务中批量多次添加。

  • 是在本地存储还是在远程服务器上存储取决于您。显然,本地商店会更快,因为您消除了网络延迟以及(反)序列化的成本,但缺点是本地商店在您自己的应用程序之外不易提供。