私は、ユーザーが特定の時間枠で特定のページのセットを特定の順序で閲覧するたびに検出できるJavaベースのWebサーバーモニターアプリケーションを作成しています。この目的のために、私はエスパーライブラリーを使用しています。クエリの最適な定式化について疑問があります。
最初に、Webサーバーに到達するHTTPリクエストのすべての情報を格納するために使用される「Access」オブジェクトを宣言しました。サーバーに新しい要求が発行されるたびに、新しいAccessオブジェクトがインスタンス化され、イベントとしてEPL処理コアに送信されます。
ページA、ページB、次にページCを閲覧するすべてのユーザーを追跡したいとします。このようなケースに対処するための最適なアプローチはどれですか。次の例のように、遷移ごとに1つずつ、複数の結合を実行する必要がありますか?
select * from Access(request='GET /A HTTP/1.1').win:time(30 sec) as a1,
Access(request='GET /B HTTP/1.1').win:time(30 sec) as a2,
Access(request='GET /C HTTP/1.1').win:time(30 sec) as a3
where a1.IP=a2.IP AND a2.IP=a3.IP