私はMarkLogicパイプラインをデバッグしようとしています。パイプラインで使用されているxqueryファイルの1つを変更するたびに、手作りのスクリプトを実行してすべてのシステムモジュールをリロードしなければなりません。私はこれがプロジェクトがいくつかのモジュールしか持っていなかったときに開発されたテクニックだと思っていますが、今はこのプロセスに数分かかります。私が必要とするのは、1)私が変更した1つのモジュールだけをリロードするより速い手法です。 CQで実行できるコードスニペット、または2)まったく異なるアプローチです。ありがとう。MarkLogicのテンプレートデバッグ:生産性を向上させる方法は?
答えて
通常、ファイルシステムから直接コードを実行できますが、パイプラインでは機能しません。
2番目に簡単なのは、webdavアプリケーションサーバーとwebdav対応のエディタ(oXygenなど)を使用することです。 webdavタイプの新しいアプリケーションサーバーを作成し、アクセスするモジュールデータベースに接続し、ログインするアカウントがあることを確認したら、準備が整いました。
他のアプローチでは、よりスマートなシステムを使用して、変更されたファイルのみをアップロードしています。 Antは通常、変更を検出するのに非常に優れています。そして、github(https://github.com/garyvidal/marklogic-ant-tasks)に利用可能なMarkLogic Antタスクがあります。確かにそれは本当にうまく動作しますが、あなたは試してみる必要があります。ビルドスクリプトをうまく考える必要があるかもしれません。私が最後に使った時、間違いなく数百のファイルをロードしたにもかかわらず、かなり分かりました。
なぜアプローチが非常に遅いのかは別の理由があります。あなたがそれを公開することができれば、具体的な最適化のヒントを求めることができます。
「すべてのシステムモジュール」をリロードする必要があると少し混乱します。おそらく、最新のサーバーリリースを試すか、サポートに確認する必要がありますか?
しかし、あなたは単にあなた自身のコードをリロードしたいと仮定すると、あなたはRecordLoaderを使用することができます:あなたは、むしろCQを使用する場合は、あなたが http://developer.marklogic.com/pubs/4.2/apidocs/AdminBuiltins.html#xdmp:filesystem-directoryで始めることができ https://github.com/marklogic/recordloader- これはあなたが始められるかもしれません。おそらくdoc-insert呼び出しにドキュメントのアクセス許可を追加する必要があり、URIを構築するにはさらに文字列を操作する必要があります。 Marklogic Antタスクでの技術とXCC接続(任意のdoesntのは、あなたのデータベースを指すように持っている)を使用して
declare namespace dir="http://marklogic.com/xdmp/directory";
if (xdmp:database('Modules') eq xdmp:database()) then()
else error(
(), 'INSTALL-NOTMODULES', text {
xdmp:database-name(xdmp:database()), 'is not the Modules database' })
,
for $i in xdmp:filesystem-directory('/path/to/files')/dir:entry
[dir:type eq 'file']
[ends-with(dir:filename, '.xqy')]
let $uri := $i/filename/string()
return xdmp:document-insert($uri, xdmp:document-get($i/dir:pathname))
申し訳ありませんが、私の投稿は明確ではありません。 2つのxqyファイルを扱っています.MLは単にファイルをファイルシステムからdbに再挿入する必要がありますか?私はRecordLoaderを見ていきます。小さな工具を使用した非常に古風な開発環境のように感じることによって、私は挫折し続けます...私は逃げます。私はCQの代わりにOxygenを使うので、少なくとも私はシンタックスカラーハイライトを得ることができます。再度、感謝します。 – bethesdaboys
私の心に本当の疑問は、いくつかのxqyファイルを修正してすぐに結果を見ることができる理由だと思います。明らかにパイプラインに触れられているxqyファイルでは、これは機能しません - そして、私はそれを解決するために正確に何をしなければならないかについてはっきりしていません。 – bethesdaboys
CPFパイプラインはトリガーによって実装され、CPFトリガーはモジュールルートをモジュールデータベースに設定して評価されます。したがって、トリガーが使用するコードをインストールする通常の方法は、それをModulesデータベースにコピーすることです。一方、アプリケーションサーバーは、ルートとしてファイルシステムの場所を使用できます。 1つの選択肢は、/ opt/MarkLogic/Modules(Linuxでは - 他の環境は異なる)を使用することです。そのファイルシステムの場所にあるモジュールは普遍的に利用可能です。 – mblakele
:ここ あなたが使用することができますhttps://github.com/garyvidal/marklogic-ant-tasks
はあなたのテンプレートで使用できるものです。
<!--Define ml namespace in project root element-->
<project name="ML Build Task" xmlns:ml="http://www.marklogic.com/ant">
>
<!--Set you the classpath to where your mlant.jar file is located.
Include any other dependent jar files required to execute tasks
noted in Dependencies section.
-->
<path id="mlant-classpath">
<fileset dir="${lib-dir}">
<include name="xcc.jar" />
<include name="mlant.jar" />
<include name="corb.jar"/>
<include name="saxon9he.jar"/>
<include name="xqdoc-ml.jar"/>
<include name="antlr-2.7.5.jar"/>
</fileset>
</path>
<!--
Setup the type definition and assign classpathref to mlant-classpath
-->
<typedef
uri="http://www.marklogic.com/ant"
resource="com/marklogic/ant/antlib.xml"
classpathref="mlant-classpath"
/>
<!--Optional: Set the property for xccstring used to connect to MarkLogic database-->
<property name="xccstring" value="xcc://test:[email protected]:9090/Docs">
<!--Create a target element and use the tasks-->
<target name="load-modified">
<ml:load xccurl="${xccstring}">
<ml:docset destdir="/app-code/">
<ml:permissionset>
<ml:permission role="nobody" permission="execute" />
<ml:permission role="nobody" permission="insert" />
<ml:permission role="nobody" permission="read" />
<ml:permission role="nobody" permission="update" />
</ml:permissionset>
<ml:collectionset>
<ml:collection name="collection1" />
<ml:collection name="collection2" />
</ml:collectionset>
<fileset dir="../src" includes="**/*" >
<modified/>
</fileset>
</ml:docset>
</ml:load>
</target>
<!--Have Fun-->
</project>
モジュールのアップロードを高速化する場合は、モジュールデータベースを消去し、「ディレクトリの作成:自動」をオフにして、複数のスレッドが設定されたRecordLoaderのようなものを使用します。ディレクトリ作成をモジュールデータベースへの自動書き込みに設定しないと、ロック競合が発生し、事実上シングルスレッドになります。
- 1. ビルド・ドッキング・タスクの生産性を向上させる
- 2. 余計なRAMを使用してVisual Studioの生産性を向上させる方法
- 3. 生産性向上ツール2017のクラスがこれ以上表示されない
- 4. Vimの生産性向上のための指の位置
- 5. デバッガでの生産性の向上IntelliJ Idea
- 6. プラグイン開発の生産性を上げる方法
- 7. Flexアプリケーションフレームワーク:PureMVC vs Mate、生産性が向上
- 8. EJB 3&Swing:GUIの応答性を向上させる方法
- 9. アングル2開発の生産性を向上させる良い習慣はありますか?
- 10. Solr&Sphinx:関連性を向上させる方法
- 11. アンドロイドアプリのクリック性を向上させる
- 12. uitableviewの性能を向上させる
- 13. CASEツールを使用して開発する際の生産性向上
- 14. HQLパフォーマンスを向上させる方法
- 15. Webex生産性向上ツール - 自動更新を無効にする
- 16. JSP型の安全性を向上させる方法はありますか?
- 17. -subimage-searchの性能を向上させる方法はありますか
- 18. 通常のXamarin for Androidで作業を簡素化し、生産性を向上させる方法はありますか?
- 19. 多くのパラメータを持つTestCaseの可読性を向上させる方法
- 20. ネットワーク上でMYSQLのパフォーマンスを向上させる方法
- 21. このDML文のパフォーマンスを向上させる方法は?
- 22. このPythonコードのパフォーマンスを向上させる方法は?
- 23. このクエリのパフォーマンスを向上させる方法は?
- 24. MySQLグループのレプリケーションのパフォーマンスを向上させる方法は?
- 25. PostgreSQLのエラー耐性を少し向上させるには?
- 26. .NET Core Web APIのパフォーマンスを向上させる方法は?
- 27. Apache Sparkマルチレイヤパーセプトロンクラシファイアの精度を向上させる方法は?
- 28. IntelliJコードエディタの速度を向上させる方法は?
- 29. Webアプリケーションのパフォーマンスを向上させる方法は?
- 30. purePDFのパフォーマンスを向上させる方法は?
WebDAVを介して接続すると、モジュールのキャッシュをダンプする(またはコンパイルするのは何か)問題を解決するにはどうすればよいですか?ありがとう! – bethesdaboys
私の知る限りでは、モジュールは最初のアクセス(初期または更新後)でコンパイルおよびキャッシュされます。 AFAIKの更新を遅くすべきではありません。その動作は、モジュールを更新するために使用するすべての方法で同じですので、WEBDAVのモジュールデータベースへのアップロードは異なりません。 – grtjn