• Nie Znaleziono Wyników

Przykład zastosowanie temporalnej bazy danych

10.3. Przykład zastosowanie temporalnej bazy danych

W celu zobrazowania korzy´sci, jakie w praktyce daje przetwarzanie danych temporalnych, napisano prosty program ´sledz ˛acy aktywno´s´c u˙zytkowników sys-temu operacyjnego. Informacje pozyskane w ten sposób mog ˛a pozwoli´c na konfi-gurowanie systemu z uwzgl˛ednieniem preferencji wybranych jego u˙zytkowników. Tego typu program mo˙ze by´c równie˙z wykorzystany do analizowania aktywno´sci pracowników firmy.

10.3.1. Ogólna charakterystyka rozwi ˛azania

Aplikacja zajmuje si˛e przechowywaniem informacji na temat u˙zytkowników oraz uruchamianych przez nich procesów w systemie operacyjnym opartym o j ˛ a-dro Linux. Zapisywane s ˛a interwały czasowe, w których poszczególni u˙zytkow-nicy s ˛a zalogowani oraz interwały, w których poszczególne programy s ˛a u˙zy-wane. Prosty interfejs u˙zytkownika pozwala na wy´swietlanie wybranych da-nych w formie tabeli. Dodatkowo, je˙zeli dost˛epny jest program Gnuplot (http: //www.gnuplot.info/), mo˙zliwa jest graficzna reprezentacja wyników zapyta ´n. Aplikacj˛e zbudowano korzystuj ˛ac z:

• relacyjnej bazy danych (Oracle Database 10g Express Edition, http://www. oracle.com/technology/products/database/xe/index.html);

• temporalnego relacyjnego systemu zarz ˛adzania baz ˛a danych (TimeDB 2.2,

http://www.timeconsult.com/Software/Software.html); • programu na bie˙z ˛aco uaktualniaj ˛acego zapisane dane;

• interfejsu u˙zytkownika przyjmuj ˛acego zapytania i wy´swietlaj ˛acego odpowie-dzi.

Dwa ostatnie elementy powy˙zszej listy to programy napisane w j˛ezyku Java przez autorów tego rozdziału. Korzystano z „Sun Java(TM) Development Kit (JDK) 5.0” oraz „Sun Java(TM) Runtime Environment (JRE) 5.0”. Wersja 5.0 wspo-mnianego zestawu narz˛edzi Java jest najwy˙zsz ˛a kompatybiln ˛a ze sterownikiem JDBC dla aktualnie dost˛epnej najnowszej bazy danych Oracle Express Edition.

10.3.2. Dane temporalne i baza danych

Podstawow ˛a cz˛e´sci ˛a aplikacji jest TimeDB — nakładka na tradycyjn ˛a relacyjn ˛a baz˛e danych, interpretuj ˛aca zapytania o charakterze temporalnym. Jest to apli-kacja napisana w j˛ezyku Java, która do prawidłowego działania wymaga bazy da-nych Oracle, Sybase lub IBM Cloudscape. Aplikacja komunikuje si˛e z systemem zarz ˛adzania baz ˛a danych poprzez sterownik JDBC. Udost˛epnia ona u˙zytkowni-kowi mo˙zliwo´s´c formułowania zapyta ´n w j˛ezyku TSQL2, transformuje je na stan-dardowy j˛ezyk zapyta ´n SQL rozumiany przez DBMS. TimeDB posiada własny in-terfejs, TDBCI, do komunikacji z aplikacj ˛a u˙zytkownika. Na rys. 10.2 zobrazo-wano struktur˛e rozwi ˛azania wykorzystuj ˛acego TimeDB.

W zapytaniach do TimeDB zwyczajne zapytanie j˛ezyka SQL poprzedza si˛e tzw. „flag ˛a czasu”. Modele zapyta ´n:

Rys. 10.2: TimeDB jako warstwa po´srednicz ˛aca mi˛edzy programem u˙zytkowym a DBMS (wg dokumentacji pakietu).

• snapshot - zapytanie odnosi si˛e tylko do danych prawdziwych w danej chwili (select * from proces;),

• sequenced - zapytanie jest powtórzone dla wszystkich przechowywanych sta-nów bazy danych (validtime period [2009/6/12~14-forever) select * from proces;),

• nonsequenced - zapytanie ignoruje stemple czasowe, odnosi si˛e do

wszystkich stanów bazy danych (nonsequenced validtime period

[2009/6/12~14-forever) select * from proces;).

Nakładka TimeDB jest dost˛epna jedynie w wersji beta (nie jest wersja finalna). Posiada wiele ogranicze ´n, które nie pozwalaj ˛a na jej zastosowanie w systemie produkcyjnym. Kluczowe ograniczenia wyst˛epuj ˛ace w tej wersji oprogramowa-nia, to:

• rozpatrywanie tylko valid time, brak transaction time i bazy typu

bitemporal;

• brak operacjiupdate, dost˛epne s ˛a tylkoinsertidelete.

Dodatkowo bardzo istotnym ograniczeniem jest brak pełnej implementacji j˛e-zyka TSQL2. Mianowicie:

• interwały czasu mog ˛a by´c tylko reprezentowane przez stał ˛a warto´s´c (przykład:

validtime period [1980-1990) select ...), • nie ma mo˙zliwo´sci odwołania si˛e do stempli czasowych.

Istnieje starsza wersja TimeDB o wi˛ekszych mo˙zliwo´sciach, posiadaj ˛aca interfejs programowania w j˛ezyku Perl. Nie została ona przez autorów tego opracowa-nia sprawdzona. Dokładniejszy opis oraz przykłady zapyta ´n dost˛epne s ˛a w doku-mentacji TimeDB.

10.3.3. Dwucz˛e´sciowa struktura rozwi ˛azania

Rozwi ˛azanie składa si˛e z dwóch osobnych programów. Pierwszy program zaj-muje si˛e uaktualnianiem informacji o zalogowanych u˙zytkownikach i

urucho-10.3. Przykład zastosowanie temporalnej bazy danych system polecenie ps java aplikacja TimeDB TDBCI JDBC daemon java aplikacja TimeDB TDBCI JDBC klient interpretuje zapytania użytkownika DBMS ORACLE TSQL2 TSQL2 SQL SQL

Rys. 10.3: Schemat wzajemnych powi ˛aza ´n poszczególnych składowych rozwi ˛ aza-nia.

mionych przez nich procesach. W tym celu z cz˛estotliwo´sci ˛a 1 Hz wywoływane zostaje polecenie systemoweps. Wynik tego polecenia jest nast˛epnie przetwa-rzany i analizowany w poszukiwaniu zmian w stosunku do stanu zarejestrowa-nego w chwili poprzedniej. Program ten docelowo mo˙ze zosta´c przekształcony w daemon systemowy. Drugi program to klient, którego zadaniem jest tłumacze-nie prostych polece ´n u˙zytkownika na zapytania TSQL i wy´swietlanie wyników. Struktur˛e stworzonego oprogramowania przedstawiono na rys. 10.3.

Aplikacja klienta pozwala na formułowanie temporalnych zapyta ´n dotycz ˛ a-cych logowa ´n u˙zytkowników, uruchamianych programów. Obsługiwane s ˛a na-st˛epuj ˛ace zapytania:

• users_active— aktualnie zalogowani u˙zytkownicy, • users_history— historia logowa ´n,

• user_history ’user’— historia logowa ´n danego u˙zytkownika ,

• users_active_in ’period’— u˙zytkownicy zalogowani w danym przedziale czasu,

• proces_active— aktualnie uruchomione procesy, • proces_history— historia aktywno´sci procesów,

• proces_history ’proces’— historia aktywno´sci danego procesu,

• user_proces_active ’user’ — aktualnie uruchomione procesy danego u˙zytkownika,

• user_proces_history ’user’ — historia uruchamianych procesów przez danego u˙zytkownika,

• proces_active_in ’period’— procesy uruchomione w danym przedziale czasu,

• user_proces_active_in ’user’ ’period’ — procesy uruchomione w da-nym przedziale czasu przez danego u˙zytkownika.

10.3.4. Przykładowe zapytania i odpowiedzi

Wyszukiwanie u˙zytkowników zalogowanych w danym przedziale czasowym

Poni˙zej przedstawiono przykładowe zapytanie o u˙zytkowników zalogowanych do systemu w danym przedziale czasu i uzyskan ˛a odpowied´z.

$ java Client users_active_in 2010/1/5~23:12:48-2010/1/5~23:30:00

::Request:: ...

[2010/1/5~23:12:48-2010/1/5~23:30:00) domin [2010/1/5~23:12:48-2010/1/5~23:30:00) rdkt [2010/1/5~23:12:48-2010/1/5~23:25:49) krystek

Wyszukiwanie procesów uruchomionych w danym przedziale czasowym

Poni˙zej przedstawiono przykładowe zapytanie o procesy uruchomione w da-nym przedziale czasu i uzyskan ˛a odpowied´z.

$ java Client proces_active_in 2010/1/5~22:30-2010/1/5~22:35

::Request:: ... [2010/1/5~22:33:14-2010/1/5~22:33:15) bash 20543 rdkt [2010/1/5~22:33:14-2010/1/5~22:33:15) bash 20541 rdkt [2010/1/5~22:33:14-2010/1/5~22:35) bash 20531 rdkt [2010/1/5~22:33:14-2010/1/5~22:35) sshd 20530 rdkt [2010/1/5~22:33:53-2010/1/5~22:33:58) less 20714 rdkt [2010/1/5~22:34:13-2010/1/5~22:34:24) ssh 20791 rdkt [2010/1/5~22:34:29-2010/1/5~22:35) ssh 20852 rdkt [2010/1/5~22:34:31-2010/1/5~22:35) zsh 20862 domin

Graficzna reprezentacja wyników

Poniewa˙z analiza tak przedstawionych rezultatów nie jest dla człowieka ła-twa ani intuicyjna, wprowadzono mo˙zliwo´s´c graficznego przedstawienia danych otrzymanych w wyniku zapytania o procesy. W takim przypadku generowane przez program s ˛a dwa pliki: dane w formacie Gnuplota (data.dat) i plik z list ˛a polece ´n Gnuplota do wygenerowania wykresu (plotscript). O´s odci˛etych re-prezentuje tutaj czas, o´s rz˛ednych —PID. Ka˙zdemu procesowi nadaje si˛e etykiet˛e z nazw ˛a u˙zytkownika i nazw ˛a procesu. Przykład tak utworzonego raportu przed-stawiono na rys. 10.4.

W celu wygenerowania wykresu mo˙zna uruchomi´c program Gnuplot z po-włoki poleceniem:

10.3. Przykład zastosowanie temporalnej bazy danych 17600 17620 17640 17660 17680 17700 17720 17740 05.01, 22:23 05.01, 22:23 05.01, 22:23 05.01, 22:23 05.01, 22:24 05.01, 22:24 05.01, 22:24 05.01, 22:24 05.01, 22:24 PID Time krystek: zsh asia: bash asia: vim

Rys. 10.4: Przykład raportu w programie Gnuplot.

Do ogl ˛adania wykresów zawieraj ˛acych du˙ze ilo´sci danych niezb˛edna jest funkcja powi˛ekszania wybranych obszarów wykresu. Tak ˛a mo˙zliwo´s´c udost˛epnia Gnu-plot z terminalem (wyj´sciem) ustawionym na „wxt”.

Literatura

[1] A. Steiner, D. I. ing Eth, M. C. Norrie, P. Dr, P. Dr, and C. A. Zehnder: A Ge-neralisation Approach to Temporal Data Models and their Implementations., (1998).

[2] M. Ben-Ari: Logika matematyczna w informatyce WNT, (2006).

[3] F. Rizzolo and A. A. Vaisman: Temporal XML: modeling, indexing, and query processing. The VLDB Journal, 17:1179–1212, (2008).

R

O Z D Z I A