我有一个Camel上下文,配置为对输入数据进行一些操作以构建RDF三元组。
有一个处理器的最终路由,使用Sesame Client API,与一个单独的Sesame实例(在Tomcat上运行3GB内存)进行通信,并发送add命令(每个命令包含大约5-10个语句)。
处理器作为单例运行,相应的“from”端点有10个concurrentConsumers(我尝试过1,然后是5,然后是10 - 更多的相同行为)。
我正在使用处理器中的HttpRepository发送添加命令,并且在运行时,我观察到索引中的(快速且)渐进性能下降。整个过程开始非常快速地索引三元组,但是在一点点之后,提交的语句变得非常缓慢。
在芝麻方面,我使用了MemoryStore和NativeStore,但(性能)行为看起来更无可救药。
问题:
答案 0 :(得分:2)
我假设您正在使用4或5个语句的事务添加是有充分理由的,但是如果您有办法进行更大的交易,那么这将显着提高速度。理想(和最快)将是在一次交易中将所有300,000三元组发送到商店。
您的问题,按顺序:
如果你只存储300,000个语句,那么商店的选择并不重要,因为本机和内存都可以很快地轻松处理这种规模。我希望内存存储的性能稍微高一些,特别是如果你将其配置为使用非零同步延迟进行持久化,但本机内存占用较少,当然更强大。
HTTPRepository.getConnection不会汇集实际的RepositoryConnection本身,而是在内部池资源(因此汇集了Sesame内部使用的实际HttpConnections)。因此getConnection相对便宜,打开和关闭多个连接也很好 - 尽管您可能会考虑重复使用相同的连接进行多次添加,以便您可以在单个事务中批量多次添加。
是在本地存储还是在远程服务器上存储取决于您。显然,本地商店会更快,因为您消除了网络延迟以及(反)序列化的成本,但缺点是本地商店在您自己的应用程序之外不易提供。