2

我有一个相当大的 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 性能始终保持良好?

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

4

1 回答 1

1

To answer your questions:

  1. The attribute index is at least materialized on hard disk inside your BaseXData folder (in which there's a folder for each database). It will usually reside in your home directory. The attribute indexes (names and values) are stored in the files following the pattern atv*.basex.
  2. Usually, the attribute index should survive restarts of both BaseX and your operating system. If you can somehow reproduce the index being invalidated without doing any updates to the database, you might want to post to BaseX' mailing list to make sure this isn't a bug. Maybe try the following steps in advance and make sure you're really not updating the database on startup.

You might want to try setting the UPINDEX option to true. This should rebuild the index when it is invalidated or not available. To make sure the index is used, run the query from basexclient -V.

Disclaimer: I'm somewhat affiliated with the BaseX-Team.

于 2013-10-22T22:44:41.640 回答