1

あるトポロジから別のトポロジにデータをレプリケートしています (たとえば、トポロジ 1 のデータが DB1 にあり、トポロジ 2 のデータが DB 2 にあるとします)。単一のクエリで両方のデータベースをチェックして、すべてのファイルがUris または Hash の値をチェックして、同じかどうかを確認します。それは可能ですか?

4

1 に答える 1

3

ハッシュを使用したチェックは、事前にハッシュを計算し、それをドキュメント内またはそのプロパティに保存する場合にのみうまく機能します。しかし、uris に基づくチェックは非常に簡単です。次のソリューションは際限なくスケーリングするわけではありませんが、数百万の URI まではうまく機能するはずです。それを QConsole にコピーして貼り付け、選択したデータベースに対して実行し、$other-db-name値を比較対象のデータベースの名前に変更します。

xquery version "1.0-ml";

let $other-db-name := "OtherDocuments"
return
xdmp:eval(
  '
    xquery version "1.0-ml";

    declare variable $uris as map:map external;

    "In other, but not here:",
    map:keys(cts:uris((), "map") - $uris),

    "Here, but not in other:",
    map:keys($uris - cts:uris((), "map"))
  ',
  (
    xs:QName("uris"), cts:uris((), "map")
  ),
  <options xmlns="xdmp:eval">
    <database>{xdmp:database($other-db-name)}</database>
  </options>
)

チッ!

于 2016-01-14T13:14:32.373 に答える