重启后BaseX属性索引丢失了吗?

时间:2013-10-22 19:25:31

标签: basex

我有一个非常大的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。

我想知道:

  1. 属性索引存储在哪里?它是否在RAM中(这可以解释为什么重启后查询速度会降低)?

  2. 如何以一种XQuery性能始终如一的方式配置我的数据库?

  3. 真的希望你能帮助我,因为这是我生产网站上的一个重要问题。

1 个答案:

答案 0 :(得分:1)

回答你的问题:

  1. 属性索引至少在BaseXData文件夹内的硬盘上实现(其中每个数据库都有一个文件夹)。它通常位于您的主目录中。属性索引(名称和值)存储在模式atv*.basex之后的文件中。
  2. 通常,属性索引应该在BaseX和您的操作系统重启后继续存在。如果您可以以某种方式重现无效的索引而不对数据库进行任何更新,您可能希望发布到BaseX' mailing list以确保这不是错误。也许提前尝试以下步骤,确保在启动时确实没有更新数据库。
  3. 您可以尝试将UPINDEX option设置为true。这应该在索引无效或不可用时重建索引。要确保使用索引,请从basexclient -V运行查询。

    免责声明:我有点与BaseX团队有联系。