Apache camel 使用Camel在芝麻中索引约300000个三倍体

Apache camel 使用Camel在芝麻中索引约300000个三倍体,apache-camel,rdf,sesame,Apache Camel,Rdf,Sesame,我配置了一个Camel上下文来处理输入数据,以便构建RDF三元组 最后一条路径是处理器,它使用Sesame客户端API与单独的Sesame实例(运行在具有3GB RAM的Tomcat上)对话,并发送add命令(每个命令包含大约5-10条语句) 处理器以单例运行,相应的“from”端点有10个ConcurrentConsumer(我尝试了1个,然后是5个,然后是10个-更不用说相同的行为) 我使用处理器中的HttpRepository发送add命令,在运行时,我观察到索引的性能(快速且)逐渐下降。

我配置了一个Camel上下文来处理输入数据,以便构建RDF三元组

最后一条路径是处理器,它使用Sesame客户端API与单独的Sesame实例(运行在具有3GB RAM的Tomcat上)对话,并发送add命令(每个命令包含大约5-10条语句)

处理器以单例运行,相应的“from”端点有10个ConcurrentConsumer(我尝试了1个,然后是5个,然后是10个-更不用说相同的行为)

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

在芝麻方面,我使用了MemoryStore和NativeStore,但(性能)行为似乎不太一样

问题是:

  • 如果我想加快索引阶段,推荐哪种存储类型
  • Repository.getConnection是否正在执行某种连接池?换句话说,我是否可以在每次“添加”处理器工作时打开和关闭连接
  • 说了我需要首先创建一个存储将所有这些三元组,是不是更倾向于创建一个“本地”的Sail存储而不是由一个远程的Sesame服务器管理(因此我不会使用HTTPRepository)
我假设您添加使用4或5条语句的事务是有充分理由的,但如果您有办法进行更大的事务,这将显著提高速度。理想的(也是最快的)方法是在一次交易中将所有300000个三元组发送到商店

请按顺序回答您的问题:

  • 如果只存储300000条语句,那么存储区的选择就不那么重要了,因为本机和内存都可以很快地处理这种规模。我希望内存存储的性能会稍微好一点,特别是如果您已经将其配置为使用非零同步延迟进行持久化,但native具有较低的内存占用,当然更健壮

  • HTTPRepository.getConnection不会池化实际的RepositoryConnection本身,而是在内部池化资源(因此Sesame在内部使用的实际HttpConnections是池化的)。因此,GETION相对便宜,并且打开和关闭多个连接是很好的-尽管您可能考虑重用相同的连接来进行多个添加,这样您就可以在单个事务中批处理多个添加。p>
  • 是本地存储还是远程存储取决于您。显然,本地存储会更快,因为您消除了网络延迟和(反)序列化的成本,但缺点是本地存储不容易在您自己的应用程序之外提供