Strumieniowe bazy danych Piotr i Paweł
Źródła zapotrzebowania na DSMS Finanse (giełda, przewidywanie trendów, wykrywanie defraudacji, szacowanie ryzyka) Zarządzanie ruchem i wydajnością sieci telekomunikacyjnych i komputerowych, serwerów WWW Przetwarzanie danych z sieci czujników (sterowanie ruchem) Zarządzanie procesami biznesowymi i ich automatyzacja
Charakterystyka DSMS Bazy danych czasu rzeczywistego Umożliwiają przechowywanie zapytań i wywoływanie ich na przepływających danych (strumieniach) Zapytania wywoływane są w sposób ciągły Konieczność stosowania algorytmów jednoprzebiegowych
Model DSMS
Strumienie wejściowe
Strumień: Definicja strumienia Seria krotek uporządkowanych za pomocą znaczników czasowych Para (s, ), s jest krotką, a znacznikiem czasowy Strumień S: <nazwa, wartość, > <XXXX, 12, 7:05> <YYYY, 13, 7:06> <XXXX, 17, 7:10> <YYYY, 11, 7:12>
Rodzaje zdarzeń Zdarzenie w bazie danych Esper może być reprezentowane przy pomocy jednego z następujących obiektów Javowywch 2011 EsperTech Inc. - Esper 4.1.0
POJO Plain-Old Java Object Zdarzenia POJO są to instancje obiektów, które umożliwiają odczytanie właściwości przy pomocy Javowej metody typu get Klasy reprezentujące zdarzenia powinny być niezmienialne aczkolwiek nie jest to restrykcyjne
Typy właściwości zdarzeń POJO Proste są reprezentowane przez pojedynczą wartość np. string Indeksowane przechowują kolekcje obiektów (tego samego typu) do których dostęp realizowany jest poprzez podanie całkowitego, nieujemnego indeksu Mapowane dostęp do właściwości zdarzenia realizowany jest przy pomocy klucza typu string Zagnieżdżone właściwość jest złożonym obiektem Javowym
Przykładowe zdarzenie POJO public class WejscieKibica{ public String getnazwisko(); public int getwiek(); public String getdruzyna(); } WejscieKibica k1 = new WejscieKibica( Kowalski, 25, Lech Poznan ); EPServiceProvider serviceprovider = EPServiceProviderManager.getDefaultProvider(); serviceprovider.getepruntime().sendevent(k1);
DSMS
DSMS Przechowuje zapytania wykonywane na strumieniach Przykładowe zapytanie w EPL: select firstname, address('work'), subordinate[0].name, subordinate[1].name from NewEmployeeEvent where address('work').streetname = 'Park Ave Za rejestrowanie zapytań w systemie Esper odpowiada metoda createepl() klasy EPAdministrator. Metoda ta zwraca obiekt typu EPStatement wykorzystywany do powiązania Listenerów z zapytaniem
Strumienie wyników
Strumienie wynikowe Strumienie zdarzeń będące wynikiem przetworzenia strumieni wejściowych przez zapytania przechowywane w DSMS. Istnieją dwa rodzaje strumieni wynikowych: Insert Stream (ISTREAM) Remove Stream (RSTREAM)
ISTREAM and RSTREAM ISTREAM zawiera każde nowe zdarzenie (new events) ze strumienia wejściowego, które spełnia warunki zapytania w DSMS RSTREAM zawiera każde zdarzenie, które w danym momencie opuszcza okno przetwarzania danych (old events) select istream druzyna from zad1.wejsciekibica.win:length(5) where wiek > 30; select rstream druzyna from zad1.wejsciekibica.win:length(5) where wiek > 30 select irstream druzyna from zad1.wejsciekibica.win:length(5) where wiek > 30
Okna Wyróżniamy 3 główne rodzaje okien: Length window Oparte na ilości pojawiających się zdarzeń Time window Oparte na czasie pojawienia się i określają czas istnienia w oknie Batch window Oparty na pakietach określonych czasem lub ilością zdarzeń
select * from Withdrawal.win:length(5) 2011 EsperTech Inc. - Esper 4.1.0
select * from Withdrawal.win:time(4 sec) 2011 EsperTech Inc. - Esper 4.1.0
select * from Withdrawal.win:time_batch(4 sec) 2011 EsperTech Inc. - Esper 4.1.0
Listener część aplikacyjna
Implementacja Definicja listenera: public class Listener implements com.espertech.esper.client.updatelistener { @Override public void update(eventbean[] newevents, EventBean[] oldevents) { ()); for ( int i = 0; i < newevents.length ; i++){ } System.out.println("ISTREAM : "+ newevents[i].getunderlying } ()); } for ( int i =0; i < oldevents. length ; i++) { System.out.println("RSTREAM : " + oldevents[i].getunderlying } System.out.println("------------");
Rejestracja zapytania
Stworzenie zapytania EPL: Implementacja String zapytanie = "select irstream druzyna from pkg.wejsciekibica.win:length(5) where wiek > 30"; EPStatement statement = serviceprovider.getepadministrator().createepl(zapytanie); Listener list = new Listener(); statement.addlistener(list);
Esper - sposób użycia Pobranie biblioteki ze strony: http://esper.codehaus.org/esper/download/download.html Rozpakowanie archiwum Dodanie do projektu pliku esper-4.2.0.jar oraz bibliotek z podkatalogu esper/lib
Ćwiczenie 1 Ćwiczenia http://sirius.cs.put.poznan.pl/~inf80144/upload/esper-kibic_bad.zip http://sirius.cs.put.poznan.pl/~inf80144/upload/esper-4.2.0.zip Dołączenie bibliotek Espera do powyższego projektu Ćwiczenie 2 http://sirius.cs.put.poznan.pl/~inf80144/upload/alarm.zip