title | layout |
---|---|
Droongaプラグイン開発チュートリアル |
ja |
{% comment %} ############################################## THIS FILE IS AUTOMATICALLY GENERATED FROM "_po/ja/tutorial/1.0.6/plugin-development/index.po" DO NOT EDIT THIS FILE MANUALLY! ############################################## {% endcomment %}
- TOC {:toc}
Droongaプラグインの作り方を理解します。 基本的な使い方のチュートリアルを完了している必要があります。
プラグインはDroongaの中でもっとも重要なコンセプトの一つです。 プラグインがDroongaを柔軟なものにしています。
多くの現実的なデータ処理タスクでは、問題に応じたデータの取り扱いが必要です。これを汎用の方法で解決するのは簡単ではありせん。
- 外部のシステムと連携するために、入力のリクエスト形式を変更する必要があるかもしれません。外部のシステムが理解できるような形式で出力するために、出力を加工する必要があるかもしれません。
- Droongaが標準で提供する機能よりもさらに複雑なデータ操作を、ストレージに直接アクセスしながら効率よく行う必要があるかもしれません。
- Droongaのデータ分散と回収ロジックをコントロールすることで、Droongaの分散性能を活かした高度なアプリケーションを構築する必要があるかもしれません。
このような場合にプラグインを利用することができます。
Droonga Engineにはプラガブルなフェーズが大きく分けて2つあり、そのうちの1つは3つのサブフェーズから構成されます。プラグインの観点からすると、都合1つから4つの操作に処理を追加することができます。
適合フェーズ(adaption phase) : このフェーズでは、プラグインは入力のリクエストと出力のレスポンスを加工できます。
処理フェーズ(processing phase) : このフェーズでは、プラグインはそれぞれのボリューム上で入力のリクエストを逐次処理します。
処理フェーズにはプラグインでの拡張が可能な3つのサブフェーズがあります:
ハンドリング・フェーズ(handling phase) : このフェーズでは、プラグインは低レベルのデータ処理、たとえばデータベース操作などを行うことができます。
立案フェーズ(planning phase) : このフェーズでは、プラグインは入力のリクエストを複数のステップに分割できます。
集約フェーズ(collection phase) : このフェーズでは、プラグインはステップから得られた結果をマージして一つの結果を生成できます。
上記の説明は、Droongaシステムの設計に基いているので、少々わかりづらいかもしれません。 ここでは、プラグインでの拡張が可能な操作という観点から離れて、プラグインで何をしたいのかという観点から見てみましょう。
既に存在するコマンドを元にして新たなコマンドを作成する
: たとえば、複雑なsearch
コマンドをラップして、手軽に使えるコマンドを作りたいかもしれません。
リクエストとレスポンスに対する*適合(adaption)*がそれを可能にします。
新しいコマンドを追加してストレージを操作する : たとえば、ストレージに保存されているデータを自在に操作したいかもしれません。 リクエストに対する*ハンドリング(handling)*がそれを可能にします。
複雑なタスクを実現するコマンドを追加する
: たとえば、標準のsearch
コマンドのような強力なコマンドを実装したいかもしれません。リクエストに対する*立案(planning)と収集(collection)*がそれを可能にします。
このチュートリアルでは、最初に*適合(adaption)*を扱います。 これはもっともプラグインの基本的なユースケースなので、Droongaにおけるプラグイン開発の基礎を理解する助けになるはずです。 その後、他のケースも上述の順で説明します。 このチュートリアルに従うと、プラグインの書き方を理解できるようになります。 自分独自の要求を満たすプラグインを作成するための第一歩となることでしょう。
詳細は以下のサブチュートリアルを参照してください:
- リクエストとレスポンスを加工し、既存のコマンドに基づいた新たなコマンドを作成する。
- 全てのボリューム上でリクエストを処理し、ストレージを操作する新たなコマンドを追加する。
- 特定のボリューム上だけでリクエストを処理し、より効率的にストレージを操作するコマンドを追加する (準備中)
- リクエストの分散とレスポンスの回収を行い、新たな複雑なコマンドを追加する (準備中)