我有一个非常大的BaseX数据库(> 2 Gb),其中包含大量XML文档。 XML文件本质上非常扁平。典型xml文件的简化示例:
<document id="doc_id_1234">
<value id="1">value 1</value>
<value id="2">value 2</value>
<value id="3">value 3</value>
</document>
我的XQueries主要基于属性选择器(即//value[@id='1' or @id='3']
),我发现在数据库中创建属性索引会导致查询性能大幅提升。
我每月或每季度上传新的XML数据。导入新的XML文件后,我再次重新创建属性索引。
然而,我发现在重新启动服务器之后(这似乎经常发生在我的服务提供商处),查询速度显着降低。感觉就像性能下降到没有属性索引存在的状态。 如果我使用BaseX GUI打开数据库,看起来属性索引仍然存在。当我删除现有的属性索引并再次重新创建它时,我的XQueries的性能再次闪电般快速。
我使用的是BaseX版本7.7.1。
我想知道:
属性索引存储在哪里?它是否在RAM中(这可以解释为什么重启后查询速度会降低)?
如何以一种XQuery性能始终如一的方式配置我的数据库?
真的希望你能帮助我,因为这是我生产网站上的一个重要问题。
答案 0 :(得分:1)
回答你的问题:
atv*.basex
之后的文件中。您可以尝试将UPINDEX
option设置为true
。这应该在索引无效或不可用时重建索引。要确保使用索引,请从basexclient -V
运行查询。
免责声明:我有点与BaseX团队有联系。