BaseX属性索引在重新启动后丢失?

BaseX属性索引在重新启动后丢失?,basex,Basex,我有一个相当大的BaseX数据库(>2GB),其中包含大量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>

我有一个相当大的BaseX数据库(>2GB),其中包含大量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>

值1
价值2
价值3
我的XQuery主要基于属性选择器(即
//value[@id='1'或@id='3']
),我发现在数据库中创建属性索引会大大提高查询性能

我每月或每季度上传新的XML数据。导入新的XML文件后,我再次重新创建属性索引

然而,我发现在重新启动服务器后(在我的服务提供商那里似乎经常发生这种情况),查询速度会显著降低。感觉性能下降到不存在属性索引的状态。 如果我使用BaseX GUI打开数据库,属性索引看起来仍然存在。当我删除现有的属性索引并重新创建它时,我的XQuery的性能又是闪电般的快

我使用的是BaseX 7.7.1版

我想知道:

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

  • 如何配置数据库,使XQuery性能始终保持良好


  • 非常希望您能帮助我,因为这是我制作网站上的一个重要问题。

    回答您的问题:

  • 属性索引至少在BaseXData文件夹(其中每个数据库都有一个文件夹)内的硬盘上具体化。它通常位于您的主目录中。属性索引(名称和值)按照模式
    atv*.basex
    存储在文件中
  • 通常,属性索引应该在BaseX和操作系统重新启动后仍然有效。如果您可以在不更新数据库的情况下以某种方式复制失效的索引,那么您可能希望发布到以确保这不是错误。也许可以提前尝试以下步骤,确保启动时没有更新数据库
  • 您可能希望尝试将设置为
    true
    。这将在索引无效或不可用时重建索引。要确保使用了索引,请从运行查询


    免责声明:我在某种程度上隶属于BaseX团队。

    我的BaseX数据目录中确实有atv*.BaseX。因此索引文件已经就位,索引本身似乎也在工作——尽管速度并不稳定(如报告所述)。我真的不知道如何模拟或检查索引get是否无效。是否有某种命令来检查属性索引的状态?“要确保使用了索引,请从basexclient-V运行查询”我不确定您的意思:在basexclient中重新启动后运行缓慢的查询?如何使用-V开关启动客户端?提前感谢您的帮助!你有没有找到解决这个问题的办法?