私は大きなxmlデータベース(30 000ファイル、1.3 Go)を持っています。このデータベースの1つのファイルには、データベースに存在する他のすべてのファイルが一覧表示されます。私の目的は、リストされているすべてのファイルがデータベースに存在するかどうかを「単に」チェックすることです。しかし、私はファイルの名前を気にする必要はなく、ドキュメント内のXMLコードだけを気にする必要があります。
これはそのようなものです:
declare variable $root := fn:collection();
declare function local:isValid($fileCode) {
let $fileSearchedIdentCode := $root/dmodule/identity/dmCode
return
$fileCode/@attribute1 = $fileSearchedIdentCode/@attribute1 and
$fileCode/@attribute2 = $fileSearchedIdentCode/@attribute2 and
$fileCode/@attribute3 = $fileSearchedIdentCode/@attribute3
};
<result>
{
for $fileCode in $root/file[identity/@fileType eq 'listOfFiles']/fileContent/fileEntry/fileCode
return
if (local:isValid($fileCode))
then <filePresent>1</filePresent>
else <fileNonPresent>2</fileNonPresent>
}
</result>
上記のコードは小さなデータベースで実行されていますが、私の場合は、信じられないほどの時間が必要です。
だから、誰かが合理的な時間でそれを実行するためにそのコードを改善するのを手伝ってくれるのだろうか;)
(私のデータベースは索引付けされています)
ご協力いただきありがとうございます !!
ヨハン