Apache camel 使用Camel在芝麻中索引约300000个三倍体
我配置了一个Camel上下文来处理输入数据,以便构建RDF三元组 最后一条路径是处理器,它使用Sesame客户端API与单独的Sesame实例(运行在具有3GB RAM的Tomcat上)对话,并发送add命令(每个命令包含大约5-10条语句) 处理器以单例运行,相应的“from”端点有10个ConcurrentConsumer(我尝试了1个,然后是5个,然后是10个-更不用说相同的行为) 我使用处理器中的HttpRepository发送add命令,在运行时,我观察到索引的性能(快速且)逐渐下降。整个过程非常快地开始索引三元组,但是在一点点之后,提交的语句增长非常缓慢 在芝麻方面,我使用了MemoryStore和NativeStore,但(性能)行为似乎不太一样 问题是: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命令,在运行时,我观察到索引的性能(快速且)逐渐下降。
- 如果我想加快索引阶段,推荐哪种存储类型
- Repository.getConnection是否正在执行某种连接池?换句话说,我是否可以在每次“添加”处理器工作时打开和关闭连接李>
- 说了我需要首先创建一个存储将所有这些三元组,是不是更倾向于创建一个“本地”的Sail存储而不是由一个远程的Sesame服务器管理(因此我不会使用HTTPRepository)李>
- 如果只存储300000条语句,那么存储区的选择就不那么重要了,因为本机和内存都可以很快地处理这种规模。我希望内存存储的性能会稍微好一点,特别是如果您已经将其配置为使用非零同步延迟进行持久化,但native具有较低的内存占用,当然更健壮
- HTTPRepository.getConnection不会池化实际的RepositoryConnection本身,而是在内部池化资源(因此Sesame在内部使用的实际HttpConnections是池化的)。因此,GETION相对便宜,并且打开和关闭多个连接是很好的-尽管您可能考虑重用相同的连接来进行多个添加,这样您就可以在单个事务中批处理多个添加。p>
- 是本地存储还是远程存储取决于您。显然,本地存储会更快,因为您消除了网络延迟和(反)序列化的成本,但缺点是本地存储不容易在您自己的应用程序之外提供