2016-04-07 17 views
2

データベースが4つのフォレストに接続されていて、ドキュメントの値が変更されるたびにMarkLgicで変更文書を作成したいとします。変更文書には、変更日、古い値、および新しい値が含まれている必要があります。MLCPでデータをロードするときのXDMP-NEWSTAMPエラー

これは、プリコミットトリガーとポストコミットトリガーを使用して達成できました。 プレコミットトリガはドキュメントの古いバージョンを取得し、ポストコミットは新しいバージョンを取得します。私は2つのドキュメントを比較し、変更ドキュメントを作成します。 これは、単一のドキュメントを更新するときにうまく機能します。

ただし、区切り線付きファイルから20000ドキュメントにMLCPをロードすることで、この解決策をテストしました。私はすべての文書で単一の要素の値を変更し、データを再度ロードしました。 私のトリガーは、変更された20000件の文書のうち7000件しか取得できませんでした。文書の残りの部分は、ロードに失敗しましたし、私が言うMLCPでエラー受信:

「XDMP-NEWSTAMPタイムスタンプ森のためにあまりにも新しい」私は事前にコミットから私のコードを除去することによって、別のテストを行なったし、

をコミット後のトリガ、およびトリガに何もしません。私は再び文書を読み込んだ。今、19000/20000文書が正常に更新され、同じXDMP-NEWSTAMPエラーが発生します。

トリガーを完全に削除してドキュメントを読み込むと、 20000/20000が読み込まれ、更新されます。

これは、トリガーを大量に実行しているようで、ドキュメントをロードするときに問題が発生します。

この問題の解決策はありますか? 私は何が必要なのかを達成するために間違った道を歩いていますか?

MLCPコマンド: mlcp import -host localhost -port 8000 -username uname -password pwd -input_file_path D:.... \ file.dsv -delimiter '|' -input_file_type delimited_text -database残業-output_collectionsテスト

作成トリガ:

xquery version "1.0-ml"; 
declare namespace html = "http://www.w3.org/1999/xhtml"; 
import module namespace trgr="http://marklogic.com/xdmp/triggers" at "/MarkLogic/triggers.xqy"; 
trgr:create-trigger("PreCommitTrigger", "Trigger that fires when a document is updated", 
trgr:trigger-data-event(
    trgr:collection-scope("test"), 
    trgr:document-content("modify"), 
    trgr:pre-commit()), 
    trgr:trigger-module(xdmp:database("Overtime"), "/", "preCommit.xqy"), 
    fn:true(), xdmp:default-permissions()), 

trgr:create-trigger("PostCommitTrigger", "Trigger that fires when a document is updated", 
trgr:trigger-data-event(
    trgr:collection-scope("test"), 
    trgr:document-content("modify"), 
    trgr:post-commit()), 
    trgr:trigger-module(xdmp:database("Overtime"), "/", "postCommit.xqy"), 
    fn:true(), xdmp:default-permissions()) 

ロードトリガー文書:

xquery version "1.0-ml"; 
declare namespace html = "http://www.w3.org/1999/xhtml"; 

xdmp:document-insert('/preCommit.xqy', 
text{ " '' "}). 
xdmp:document-insert('/postCommit.xqy', 
text{ " '' "}) 
+1

タイムスタンプを指定していますか?使用しているMLCPコマンドを投稿し、トリガーアクションに関する詳細情報を提供してください。 – wst

+0

私は、トリガでmlcpを使用して同様の問題が発生しました。トリガーが空であっても、mlcpは非常に高速で、MarkLogicは問題を抱えています。私は最高の解決策が何であるかを聞くことに興味があります。回避策として、mlcpジョブをより小さなバッチに分割し、MarkLogicが完了するのを待つことができます。 – chriskelly

+0

@wstいいえタイムスタンプを指定していないので、質問に詳細を追加しました。 – user3916117

答えて

1

MarkLogicは、CPF(コンテンツ処理フレームワーク - https://docs.marklogic.com/guide/cpf/quickStart?hq=CPF)はあなたが作るために役立つだろうこの場合、挿入されたファイルを管理し、ファイルを分析し、そのファイルのDLS(https://docs.marklogic.com/dls)バージョンを作成するワークフローを持つことができます。 DLSは、あなたがやりたいことだと思うファイルのバージョンを制御するためのライブラリです。それがあなたを助けることを願っています

+0

MarkLogicのCPFを調べましたが、引き続きトリガーを設定する必要があることに気付きました。トリガーがMLCPのデータをバルクロードする際に問題が発生した場合は、CPFを使用しても同じ問題が発生します。 – user3916117

関連する問題