使用virtuoso数据库加速读取知识图谱文件
一、背景virtuoso数据库是较为常用的知识图谱查询服务器,可以读取KG文件(如.ttl)并在本机实现SPARQL查询服务二、问题virtuoso在安装后,加载流程是:先使用ld_dir读取目录文件再使用rdf_loader_run()正式读取KG时最后使用checkpoint持久化保存但是,在第二部,使用rdf_loader_run()正式读取KG时,默认配置加载速度先快,然后迅速衰减。同时,
一、背景
virtuoso数据库是较为常用的知识图谱查询服务器,可以读取KG文件(如.ttl)并在本机实现SPARQL查询服务
二、问题
virtuoso在安装后,加载流程是:
- 先使用ld_dir读取目录文件
- 再使用rdf_loader_run()正式读取KG时
- 最后使用checkpoint持久化保存
但是,在第二步,使用rdf_loader_run()正式读取KG时,默认配置加载速度先快,然后迅速衰减。
同时,virtuoso日志也提示May be many cores on the server, but frequency cores are low,大概意思是服务器开启了多个线程,导致CPU疯狂切换、同步线程,CPU使用效率低。
三、解决方案
修改virtuoso文件下database子文件夹下的,virtuoso.ini配置文件,降低读取的查询、同步线程数到最低,即1。
具体而言,将AsyncQueueMaxThreads(默认10)、ServerThreads(默认10),均修改为1。
四、进一步优化
此外,还可根据自己服务器的空闲内存情况,尽可能多开NumberOfBuffers和MaxDirtyBuffers数量,比如博主只有16g内存,但开了128g的虚拟内存,所以依然选择了64g的配置“Uncomment next two lines if there is 64 GB system memory free”。
至于修改方式,就是将NumberOfBuffers和MaxDirtyBuffers前的;符号(用于注释)删掉保存即可。
五、效果
亲测,原来的多线程+小内存默认配置,读100多g的KG文件要一周多才能读完(之间CPU还因为线程切换、同步闲置了不少时间)。
但按照本文的配置,只花了不到两天。
六、提示
正常查询的时候,记得把AsyncQueueMaxThreads、ServerThreads重设为默认的10,不然查询效率太低;把内存也调回至较小的合适大小,不然其他程序会很容易把内存撑破。
更多推荐




所有评论(0)