2

多数の XML ドキュメントを含むかなり大きな BaseX データベース (>2 Gb) があります。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>

私の XQuery は主に属性セレクター (つまり//value[@id='1' or @id='3']) に基づいており、データベースに属性インデックスを作成すると、クエリのパフォーマンスが大幅に向上することがわかりました。

毎月または四半期ごとに新しい XML データをアップロードしています。新しい XML ファイルをインポートした後、属性インデックスを再作成します。

ただし、サーバーの再起動後 (サービス プロバイダーでは頻繁に発生するようです)、クエリ速度が大幅に低下することがわかりました。アトリビュート インデックスが存在しない状態になると、パフォーマンスが低下するように感じます。BaseX GUI を使用してデータベースを開くと、属性インデックスがまだそこにあるように見えます。既存の属性インデックスを削除して再作成すると、XQuery のパフォーマンスが再び電光石火の速さになります。

BaseX バージョン 7.7.1 を使用しています。

私が知りたいのですが:

  1. 属性インデックスはどこに保存されますか? それはRAMにありますか(再起動後にクエリ速度が低下する理由を説明します)?

  2. XQuery のパフォーマンスが一貫して良好になるようにデータベースを構成するにはどうすればよいですか?

これは私の制作ウェブサイトの重要な問題であるため、私を助けてくれることを本当に願っています.

4

1 に答える 1

1

質問に答えるには:

  1. 属性インデックスは、BaseXData フォルダー (各データベースのフォルダーがある) 内のハード ディスク上で少なくとも実体化されます。これは通常、ホーム ディレクトリにあります。属性インデックス (名前と値) は、パターンに従ってファイルに格納されますatv*.basex
  2. 通常、属性インデックスは、BaseX とオペレーティング システムの両方を再起動しても存続するはずです。データベースを更新せずに無効化されたインデックスを何らかの方法で再現できる場合は、これがバグでないことを確認するためにBaseX のメーリング リストに投稿することをお勧めします。事前に次の手順を試して、起動時にデータベースを更新していないことを確認してください。

UPINDEXオプションを に設定してみてくださいtrue。これにより、インデックスが無効になっているか利用できない場合にインデックスが再構築されます。インデックスが使用されていることを確認するには、 からクエリを実行しますbasexclient -V

免責事項: 私は BaseX チームと多少関係があります。

于 2013-10-22T22:44:41.640 に答える