2011-08-02 7 views
5

私たちは車両追跡システムを開発しています。すべてのVTSと同様に、私たちは車両にGPS装置を取り付け、位置情報をサーバーに送信し続けます。サーバ上では、TCPコミュニケータプロセスがそのデータを読み取ってデータベースに保存します。 ここで、車両のアラートをトリガするルールセットを確認する必要があります。例えば、車両が特定の場所に到達すると警告が必要です特定のスピード制限などを交差する。 これを実装する最良の方法をお勧めしますか? 私たちはそれを実装するいくつかの方法を考えました。 1.私たちのTCPコミュニケータは、場所を受け取ったときに警告をチェックする必要があります。 2. 15分ごとに継続して実行され、15分以内にアラートの場所の詳細を確認するプロセスがあります。GPSデバイスとの通信中にルールチェックを実装する最良の方法

私は論理的にも技術的にもそれを実装するための提案を探しています。例えばDroolsを使うべきかどうかを決めるのかどうか。

+0

が誰ませんか?完璧な答えではない提案が必要です。 – Saurabh

答えて

6

私は数年前に出席したJavaOneカンファレンスで、フェデックスの誰かが実際にこのようなことを発表しました。

基本的には、Drools Expert + Fusionを使用して車両の位置データにCEP(複合イベント処理)を実行するという考え方でした。

私が思い出す限り、車両は定期的に(数秒ごとに)GPS座標をエンジン(イベント)に送信し、ルールエンジンによって消化され、ルールに応じて(「停車中」「外出中」)や通知を送信する(「15分以内に目的地に到着する」など)

"drools fusion cep vehicle tracking"のためのGoogleはあなたにいくつかのより多くの詳細を与える必要がありthisプレゼンテーションを暴くか、少なくともいくつかの洞察を提供しています。)

+0

AlistairIsraelに感謝します。あなたが共有した情報が、同じドメインを扱う際に必ず私を助けるように見えます。 – Saurabh

2

Droolsのやり方は、たくさんのオブジェクトをDroolsの "Working Memory"に記入することです。あなたがオブジェクトを塗りつぶしている間、Droolsはどのルールがオブジェクト上で「発生するか」を見つけ出し、そのオブジェクトをRete-Treeに格納します。オブジェクトをメモリに格納してすべてのルールを実行すると、Droolsはルールに対応して記述したコードを処理します。

あなたのルールに必要な車両から受け取ったすべてのデータをオブジェクトにして、それを作業メモリに入れることをお勧めします。

Droolsでは多くの小さなルールを作成し、それぞれが1つのことをチェックして結果に作用します。

Droolsに評価に必要なデータを取得させるのは良い方法ではありませんが、車や他のシステムにメッセージを送信するイベントをDroolsがトリガーするのに問題はありません。 (私は非同期的に起こるはずだから、Droolsを遅くしないと思う)実際、Droolsはイベントリスナーを利用することを提案している。

0

15分ごとに実行する理由はありません。これにより、トリガーの遅延が発生し、15分ごとに負荷のバーストが発生し、無負荷時になります。

データベースに新しいアラートルールと新しいロケーションデータのフラグを設定することができます。イベントをスキャンするときは、2パスのアプローチを使用できます。すべての新しいルールをすべての場所のデータと照合し、新しいものはもはや新しいものではないことをマークします。次に、既存のルールに照らして新しいロケーションデータをすべてチェックし、新しいルールを新しいものにマークします。

これは好きなだけ実行できます。理想的には、あなたが待つ時間が長くなればなるほど、あなたが蓄積する仕事が増えるので、あなたはそれを長く待たないでしょう。

TCPコミュニケータがスキャンに関連するアラートを定期的にチェックするのは、アラートが即時になることです。欠点は、アラート処理によってTCPコミュニケータのパスが遅くなり、「1つの更新がアラートの1つのチェックを意味する」モデルにロックされることです。

「データベースをスキャンする」アプローチでは、負荷が高すぎると、高頻度の更新元からの多くの更新でのみアラートのチェックを行うことができます。これは必然的に必要な作業の量を減らすことによって負荷を処理しますが、アラートが失われる可能性があります。

私が考えているアプローチはすべてうまくいくと思います。

関連する問題