SlideShare ist ein Scribd-Unternehmen logo
1 von 19
Esper
Framework de Processamento de eventos
Nuno
Processamento de eventos com Esper
2010/062/19
Sobre mim
• Trabalho numa empresa que faz localização de viaturas
em tempo real
• Desenvolvo em Java desde 2001
• Tenho particular interesse em tudo o que “flutua” em
torno do Java
• Entusiasta de desenvolvimento em geral
Processamento de eventos com Esper
2010/063/19
Agenda
- Eventos
- Processamento de eventos
- Esper / NEsper (.NET)
- Resumo / Mais informação
- Questões
Processamento de eventos com Esper
2010/064/19
Eventos
• Um evento caracteriza a alteração de um estado. Pode
ser:
– Uma cotação
– O acknowlegde de um pagamento
– Uma alteração de password
– A medição de um sensor de pressão a cada 30 segundos
– O tempo de resposta de um serviço
• Pode ser representado por:
– XML
– POJO (Plain Old Java Object)
– Pares chave/valor
Processamento de eventos com Esper
2010/065/19
Processamento de eventos
• Estamos habituados a guardar a informação e depois
executar queries para a obter e agir quando detectamos
determinado padrão
• No processamento de eventos a filosofia é diferente:
Criamos as condições que queremos identificar e depois
injectamos os dados no motor de eventos de forma a
sermos notificados de quando determinada condição for
identificada. Ou seja, primeiro definimos as “queries” e
só depois introduzimos informação.
Processamento de eventos com Esper
2010/066/19
Requisitos para o processamento de eventos
• Eventos podem estar relacionados:
– Temporalmente
– Ordem
– Casualidade (aconteceu antes/depois)
– ...
• Fluxos de eventos
– Grande fluxo, alta disponibilidade
• Eventos alteram o seu estado frequentemente
– Baixa latência de processamento
• Quando A então B
– Utilização fácil e intuitiva
Processamento de eventos com Esper
2010/067/19
Definições
• ESP – Event Stream Processing
– Processamento de fluxos de eventos
• Faz a monitorização de dados de eventos, analiza-os e age em conformidade
• ex: valor médio das acções da Brisa nos últimos 30 minutos
• CEP – Complex Event Processing
– Detecção de padrões dentro do(s) fluxo(s) de
eventos
• Detecta padrões nas relações entre os eventos do(s) fluxo(s)
• ex: se as acções da Brisa subirem mais de 2% duas vezes, seguidas da descida
de 3% das da Galp Energia, então...
• Quando condição ESP/CEP então...
Processamento de eventos com Esper
2010/068/19
Esper / NEsper
• Motor de ESP/CEP
– Quando condição_Esper então o_código_java_habitual
– Tem um footprint pequeno
– É muito “ágil” tornando-se muito fácil de incluir no código existente
– É open source (também existe a versão enterprise)
– Junta o melhor dos dois mundos: ESP e CEP
• Informação sobre a framework
– A primeira release foi em Junho de 2006 (iniciou-se em Outubro de 2004)
– NEsper (versão para .NET) - igual à versão Java
– Versão Enterprise (cliente Web, monitorização de eventos, extensões JMX,
EsperJDBC, suporte técnico, etc)
Processamento de eventos com Esper
2010/069/19
Exemplos
• As “queries” e as condições são definidas com o recurso
a uma linguagem semelhante ao que estamos muito
habituados: SQL
– exemplos:
select * from Cotacao (valor > 13.4).win:length(5)
Selecciona os últimos 5 eventos do tipo “Cotacao” com valor > 13.4
insert into CotacoesImportantes select * from Cotacao where Math.ceil (valor) > 13.4
Insere numa tabela virtual todas as “Cotações” em que o valor seja superior a 13.4
select conta, nome_conta, sum(valor) from Cotacao.win:time_batch(10 sec) group by conta
Selecciona a soma dos valores das “Cotações”, agrupados por conta
Processamento de eventos com Esper
2010/0610/19
Criar Listeners (classe Listener)
import net.esper.client.*;
public class MyListener implements UpdateListener {
// método invocado pelo motor
public void update (EventBean[] newEvents,
EventBean[] oldEvents) {
// processamento do(s) evento(s)
}
}
Processamento de eventos com Esper
2010/0611/19
Registar Listeners
import net.esper.client.*;
// get da instância do motor
EPServiceProvider engine =
EPServiceProviderManager.getDefaultProvider();
// regista um statement
EPStatement statement = engine.getEPAdministrator().createEPL
(“sql_statement“, “nome_statement”);
// adiciona um listener
statement.addListener(new MyListener ());
Processamento de eventos com Esper
2010/0612/19
Registar eventos
import net.esper.client.*;
// get da instância do motor
EPServiceProvider engine =
EPServiceProviderManager.getDefaultProvider ();
// regista um statement
EPRuntime runTimeEngine = engine.getRuntime();
...
Cotacao evento = new Cotacao (12345, “conta_1”, 13.4);
runTimeEngine.sendEvent (evento);
...
Processamento de eventos com Esper
2010/0613/19
Potencialidades
// filtra por localização de um rectângulo
select * from EVT (x in [4:10], y in [6:12])
// conta todas a presenças na zona 10 nos últimos 30 segundos
select count(*) from EVT (zona = 10).win:time(30 sec)
// conta as presenças por zona nos últimos 10 minutos, a cada minuto
select zona, count(*) as cnt from EVT.std:groupby(zona).win:time(10 min) output every 1 min
// detecta quando ocorre uma entrada na zona 2 antes da zona 1
select Zona2.id
from EVT(zona = 2).win:time(1 day) Zona2
left outer join
EVT(zona = 1).win:time(1 day) Zona1
on Zona1.id = Zona2.id
where Zona1.id is null
• Filtrar eventos
• Janelas temporais
• Agregação e contagem temporal
• Joins
Processamento de eventos com Esper
2010/0614/19
Potencialidades
// alerta para quando for atingido o valor mínimo para uma zona
select zona, count(*)
from EVT.std:unique(id),
sql:db[select mini from Minimum where zone=${EVT.zona}]
having mini < count(*)
• Obtenção de dados históricos ou de referência
// detecta ids desconhecidos
select * from EVT
where id not in
(select id
from IdsConhecidos.std:unique(‘id’))
• Subqueries
Processamento de eventos com Esper
2010/0615/19
Especificações
• Tipos de eventos
– POJO
– Legacy Java
– Propriedades aninhadas (sem limite de profundidade), indexadas ou
mapeadas (E4X – ECMAScript for XML)
– XML/DOM + XPath
• Performance (anunciada)
– Mais de 500 000 eventos por segundo numa máquina com processador
Dual Core a 2GHz com 1000 condições registadas no motor
– Latência inferior e 3 microsegundos
– Evolução linear entre os 100 000 e os 500 000 eventos por segundo neste
hardware
Processamento de eventos com Esper
2010/0616/19
Sumário
• CEP/ESP
- Fluxos de dados avaliados contra as “queries” registadas despoletando
listeners
- Tempo e casualidade
• Vantagens
- EPL (Event Processing Language): tipo SQL e fácil de aprender
- Footprint pequeno
- Fácil de incluir em código existente
- Bem documentada
• EDA (Event Driven Application)
- Ajuda a resolver muitos dos problemas desta abordagem
- Tecnologia um pouco desconhecida, sendo pouco vista, mas com
maturidade suficiente para ser largamente utilizada
Processamento de eventos com Esper
2010/0617/19
Diagrama
Esper
OFFON
select ...select ...select ...
eventoeventoeventoeventoevento
match1match2
select ...
Processamento de eventos com Esper
2010/0618/19
Mais informação
• Esper - http://esper.codehaus.org
• EsperTech - http://www.espertech.com
• Portal CEP - http://complexevents.com
• Google 
Processamento de eventos com Esper
2010/0619/19
Questões
Nuno

Weitere ähnliche Inhalte

Andere mochten auch

Complex Event Processing in Practice at jDays 2012
Complex Event Processing in Practice at jDays 2012Complex Event Processing in Practice at jDays 2012
Complex Event Processing in Practice at jDays 2012Peter Norrhall
 
Complex Event Processing with Esper
Complex Event Processing with EsperComplex Event Processing with Esper
Complex Event Processing with EsperAntónio Alegria
 
Complex Event Processing - A brief overview
Complex Event Processing - A brief overviewComplex Event Processing - A brief overview
Complex Event Processing - A brief overviewIstván Dávid
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerLuminary Labs
 

Andere mochten auch (6)

CEP: from Esper back to Akka
CEP: from Esper back to AkkaCEP: from Esper back to Akka
CEP: from Esper back to Akka
 
Complex Event Processing in Practice at jDays 2012
Complex Event Processing in Practice at jDays 2012Complex Event Processing in Practice at jDays 2012
Complex Event Processing in Practice at jDays 2012
 
Complex Event Processing with Esper
Complex Event Processing with EsperComplex Event Processing with Esper
Complex Event Processing with Esper
 
Esper - CEP Engine
Esper - CEP EngineEsper - CEP Engine
Esper - CEP Engine
 
Complex Event Processing - A brief overview
Complex Event Processing - A brief overviewComplex Event Processing - A brief overview
Complex Event Processing - A brief overview
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI Explainer
 

Ähnlich wie Framework (N)Esper @ PT.JUG 2010/06

Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComunidade NetPonto
 
Monitoracao Inteligente na Globo.com
Monitoracao Inteligente na Globo.comMonitoracao Inteligente na Globo.com
Monitoracao Inteligente na Globo.comDenis Vieira
 
TDC2017 | POA Trilha BigData - Arquitetura Big Data para Gestão de Regras de ...
TDC2017 | POA Trilha BigData - Arquitetura Big Data para Gestão de Regras de ...TDC2017 | POA Trilha BigData - Arquitetura Big Data para Gestão de Regras de ...
TDC2017 | POA Trilha BigData - Arquitetura Big Data para Gestão de Regras de ...tdc-globalcode
 
Processamento de Eventos Complexos com Spark
Processamento de Eventos Complexos com SparkProcessamento de Eventos Complexos com Spark
Processamento de Eventos Complexos com SparkLeandro Mendes Ferreira
 
Apresentando CEP - TDC2011 / Trilha SOA
Apresentando CEP - TDC2011 / Trilha SOAApresentando CEP - TDC2011 / Trilha SOA
Apresentando CEP - TDC2011 / Trilha SOApaulosampei
 
Amazon EC2 boas praticas e otimizações de desempenho
Amazon EC2 boas praticas e otimizações de desempenhoAmazon EC2 boas praticas e otimizações de desempenho
Amazon EC2 boas praticas e otimizações de desempenhoAmazon Web Services LATAM
 
Webinar: Monitorando sensores IoT: Do ESP32 ao Grafana
Webinar: Monitorando sensores IoT: Do ESP32 ao GrafanaWebinar: Monitorando sensores IoT: Do ESP32 ao Grafana
Webinar: Monitorando sensores IoT: Do ESP32 ao GrafanaEmbarcados
 
Data stream mining - TDC POA 2018 (Data Science)
Data stream mining - TDC POA 2018 (Data Science)Data stream mining - TDC POA 2018 (Data Science)
Data stream mining - TDC POA 2018 (Data Science)Andre Nunes
 
TDC18 (POA) Data Science - data stream mining
TDC18 (POA) Data Science - data stream miningTDC18 (POA) Data Science - data stream mining
TDC18 (POA) Data Science - data stream miningAndré Luís Nunes
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoComunidade NetPonto
 
Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Rodrigo Stefani Domingues
 
Desenvolvendo Interfaces Ricas em JavaFX para Ultrabooks
Desenvolvendo Interfaces Ricas em JavaFX para UltrabooksDesenvolvendo Interfaces Ricas em JavaFX para Ultrabooks
Desenvolvendo Interfaces Ricas em JavaFX para UltrabooksIntel Software Brasil
 
TDC 2017 - Borg até o Prometheus: Site Reliability Engineering
TDC 2017 - Borg até o Prometheus: Site Reliability EngineeringTDC 2017 - Borg até o Prometheus: Site Reliability Engineering
TDC 2017 - Borg até o Prometheus: Site Reliability EngineeringFelipe Klerk Signorini
 
TDC2017 | São Paulo - Trilha Modern Web How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Modern Web How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Modern Web How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Modern Web How we figured out we had a SRE team ...tdc-globalcode
 
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com SwiftSemcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com SwiftJuliana Chahoud
 
Monitore sua infraestrutura com o Elasticsearch
Monitore sua infraestrutura com o ElasticsearchMonitore sua infraestrutura com o Elasticsearch
Monitore sua infraestrutura com o ElasticsearchMarcus Vinicius Leandro
 
Funcionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticasFuncionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticasKirmayr tomaz
 

Ähnlich wie Framework (N)Esper @ PT.JUG 2010/06 (20)

Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noite
 
Monitoracao Inteligente na Globo.com
Monitoracao Inteligente na Globo.comMonitoracao Inteligente na Globo.com
Monitoracao Inteligente na Globo.com
 
TDC2017 | POA Trilha BigData - Arquitetura Big Data para Gestão de Regras de ...
TDC2017 | POA Trilha BigData - Arquitetura Big Data para Gestão de Regras de ...TDC2017 | POA Trilha BigData - Arquitetura Big Data para Gestão de Regras de ...
TDC2017 | POA Trilha BigData - Arquitetura Big Data para Gestão de Regras de ...
 
Processamento de Eventos Complexos com Spark
Processamento de Eventos Complexos com SparkProcessamento de Eventos Complexos com Spark
Processamento de Eventos Complexos com Spark
 
Apresentando CEP - TDC2011 / Trilha SOA
Apresentando CEP - TDC2011 / Trilha SOAApresentando CEP - TDC2011 / Trilha SOA
Apresentando CEP - TDC2011 / Trilha SOA
 
Amazon EC2 boas praticas e otimizações de desempenho
Amazon EC2 boas praticas e otimizações de desempenhoAmazon EC2 boas praticas e otimizações de desempenho
Amazon EC2 boas praticas e otimizações de desempenho
 
Webinar: Monitorando sensores IoT: Do ESP32 ao Grafana
Webinar: Monitorando sensores IoT: Do ESP32 ao GrafanaWebinar: Monitorando sensores IoT: Do ESP32 ao Grafana
Webinar: Monitorando sensores IoT: Do ESP32 ao Grafana
 
Data stream mining - TDC POA 2018 (Data Science)
Data stream mining - TDC POA 2018 (Data Science)Data stream mining - TDC POA 2018 (Data Science)
Data stream mining - TDC POA 2018 (Data Science)
 
TDC18 (POA) Data Science - data stream mining
TDC18 (POA) Data Science - data stream miningTDC18 (POA) Data Science - data stream mining
TDC18 (POA) Data Science - data stream mining
 
OpenIoT
OpenIoT OpenIoT
OpenIoT
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis Paulino
 
Iasapoa eca eda
Iasapoa eca edaIasapoa eca eda
Iasapoa eca eda
 
Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017
 
Desenvolvendo Interfaces Ricas em JavaFX para Ultrabooks
Desenvolvendo Interfaces Ricas em JavaFX para UltrabooksDesenvolvendo Interfaces Ricas em JavaFX para Ultrabooks
Desenvolvendo Interfaces Ricas em JavaFX para Ultrabooks
 
TDC 2017 - Borg até o Prometheus: Site Reliability Engineering
TDC 2017 - Borg até o Prometheus: Site Reliability EngineeringTDC 2017 - Borg até o Prometheus: Site Reliability Engineering
TDC 2017 - Borg até o Prometheus: Site Reliability Engineering
 
Aula3so
Aula3soAula3so
Aula3so
 
TDC2017 | São Paulo - Trilha Modern Web How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Modern Web How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Modern Web How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Modern Web How we figured out we had a SRE team ...
 
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com SwiftSemcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
 
Monitore sua infraestrutura com o Elasticsearch
Monitore sua infraestrutura com o ElasticsearchMonitore sua infraestrutura com o Elasticsearch
Monitore sua infraestrutura com o Elasticsearch
 
Funcionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticasFuncionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticas
 

Framework (N)Esper @ PT.JUG 2010/06

  • 2. Processamento de eventos com Esper 2010/062/19 Sobre mim • Trabalho numa empresa que faz localização de viaturas em tempo real • Desenvolvo em Java desde 2001 • Tenho particular interesse em tudo o que “flutua” em torno do Java • Entusiasta de desenvolvimento em geral
  • 3. Processamento de eventos com Esper 2010/063/19 Agenda - Eventos - Processamento de eventos - Esper / NEsper (.NET) - Resumo / Mais informação - Questões
  • 4. Processamento de eventos com Esper 2010/064/19 Eventos • Um evento caracteriza a alteração de um estado. Pode ser: – Uma cotação – O acknowlegde de um pagamento – Uma alteração de password – A medição de um sensor de pressão a cada 30 segundos – O tempo de resposta de um serviço • Pode ser representado por: – XML – POJO (Plain Old Java Object) – Pares chave/valor
  • 5. Processamento de eventos com Esper 2010/065/19 Processamento de eventos • Estamos habituados a guardar a informação e depois executar queries para a obter e agir quando detectamos determinado padrão • No processamento de eventos a filosofia é diferente: Criamos as condições que queremos identificar e depois injectamos os dados no motor de eventos de forma a sermos notificados de quando determinada condição for identificada. Ou seja, primeiro definimos as “queries” e só depois introduzimos informação.
  • 6. Processamento de eventos com Esper 2010/066/19 Requisitos para o processamento de eventos • Eventos podem estar relacionados: – Temporalmente – Ordem – Casualidade (aconteceu antes/depois) – ... • Fluxos de eventos – Grande fluxo, alta disponibilidade • Eventos alteram o seu estado frequentemente – Baixa latência de processamento • Quando A então B – Utilização fácil e intuitiva
  • 7. Processamento de eventos com Esper 2010/067/19 Definições • ESP – Event Stream Processing – Processamento de fluxos de eventos • Faz a monitorização de dados de eventos, analiza-os e age em conformidade • ex: valor médio das acções da Brisa nos últimos 30 minutos • CEP – Complex Event Processing – Detecção de padrões dentro do(s) fluxo(s) de eventos • Detecta padrões nas relações entre os eventos do(s) fluxo(s) • ex: se as acções da Brisa subirem mais de 2% duas vezes, seguidas da descida de 3% das da Galp Energia, então... • Quando condição ESP/CEP então...
  • 8. Processamento de eventos com Esper 2010/068/19 Esper / NEsper • Motor de ESP/CEP – Quando condição_Esper então o_código_java_habitual – Tem um footprint pequeno – É muito “ágil” tornando-se muito fácil de incluir no código existente – É open source (também existe a versão enterprise) – Junta o melhor dos dois mundos: ESP e CEP • Informação sobre a framework – A primeira release foi em Junho de 2006 (iniciou-se em Outubro de 2004) – NEsper (versão para .NET) - igual à versão Java – Versão Enterprise (cliente Web, monitorização de eventos, extensões JMX, EsperJDBC, suporte técnico, etc)
  • 9. Processamento de eventos com Esper 2010/069/19 Exemplos • As “queries” e as condições são definidas com o recurso a uma linguagem semelhante ao que estamos muito habituados: SQL – exemplos: select * from Cotacao (valor > 13.4).win:length(5) Selecciona os últimos 5 eventos do tipo “Cotacao” com valor > 13.4 insert into CotacoesImportantes select * from Cotacao where Math.ceil (valor) > 13.4 Insere numa tabela virtual todas as “Cotações” em que o valor seja superior a 13.4 select conta, nome_conta, sum(valor) from Cotacao.win:time_batch(10 sec) group by conta Selecciona a soma dos valores das “Cotações”, agrupados por conta
  • 10. Processamento de eventos com Esper 2010/0610/19 Criar Listeners (classe Listener) import net.esper.client.*; public class MyListener implements UpdateListener { // método invocado pelo motor public void update (EventBean[] newEvents, EventBean[] oldEvents) { // processamento do(s) evento(s) } }
  • 11. Processamento de eventos com Esper 2010/0611/19 Registar Listeners import net.esper.client.*; // get da instância do motor EPServiceProvider engine = EPServiceProviderManager.getDefaultProvider(); // regista um statement EPStatement statement = engine.getEPAdministrator().createEPL (“sql_statement“, “nome_statement”); // adiciona um listener statement.addListener(new MyListener ());
  • 12. Processamento de eventos com Esper 2010/0612/19 Registar eventos import net.esper.client.*; // get da instância do motor EPServiceProvider engine = EPServiceProviderManager.getDefaultProvider (); // regista um statement EPRuntime runTimeEngine = engine.getRuntime(); ... Cotacao evento = new Cotacao (12345, “conta_1”, 13.4); runTimeEngine.sendEvent (evento); ...
  • 13. Processamento de eventos com Esper 2010/0613/19 Potencialidades // filtra por localização de um rectângulo select * from EVT (x in [4:10], y in [6:12]) // conta todas a presenças na zona 10 nos últimos 30 segundos select count(*) from EVT (zona = 10).win:time(30 sec) // conta as presenças por zona nos últimos 10 minutos, a cada minuto select zona, count(*) as cnt from EVT.std:groupby(zona).win:time(10 min) output every 1 min // detecta quando ocorre uma entrada na zona 2 antes da zona 1 select Zona2.id from EVT(zona = 2).win:time(1 day) Zona2 left outer join EVT(zona = 1).win:time(1 day) Zona1 on Zona1.id = Zona2.id where Zona1.id is null • Filtrar eventos • Janelas temporais • Agregação e contagem temporal • Joins
  • 14. Processamento de eventos com Esper 2010/0614/19 Potencialidades // alerta para quando for atingido o valor mínimo para uma zona select zona, count(*) from EVT.std:unique(id), sql:db[select mini from Minimum where zone=${EVT.zona}] having mini < count(*) • Obtenção de dados históricos ou de referência // detecta ids desconhecidos select * from EVT where id not in (select id from IdsConhecidos.std:unique(‘id’)) • Subqueries
  • 15. Processamento de eventos com Esper 2010/0615/19 Especificações • Tipos de eventos – POJO – Legacy Java – Propriedades aninhadas (sem limite de profundidade), indexadas ou mapeadas (E4X – ECMAScript for XML) – XML/DOM + XPath • Performance (anunciada) – Mais de 500 000 eventos por segundo numa máquina com processador Dual Core a 2GHz com 1000 condições registadas no motor – Latência inferior e 3 microsegundos – Evolução linear entre os 100 000 e os 500 000 eventos por segundo neste hardware
  • 16. Processamento de eventos com Esper 2010/0616/19 Sumário • CEP/ESP - Fluxos de dados avaliados contra as “queries” registadas despoletando listeners - Tempo e casualidade • Vantagens - EPL (Event Processing Language): tipo SQL e fácil de aprender - Footprint pequeno - Fácil de incluir em código existente - Bem documentada • EDA (Event Driven Application) - Ajuda a resolver muitos dos problemas desta abordagem - Tecnologia um pouco desconhecida, sendo pouco vista, mas com maturidade suficiente para ser largamente utilizada
  • 17. Processamento de eventos com Esper 2010/0617/19 Diagrama Esper OFFON select ...select ...select ... eventoeventoeventoeventoevento match1match2 select ...
  • 18. Processamento de eventos com Esper 2010/0618/19 Mais informação • Esper - http://esper.codehaus.org • EsperTech - http://www.espertech.com • Portal CEP - http://complexevents.com • Google 
  • 19. Processamento de eventos com Esper 2010/0619/19 Questões Nuno