Dnes: 15. prosince 2017    | Registrace | Hledáme | Redakce | Info | Testy | Školení | Ocenění | Nápověda | Čtenář: nepřihlášen

Rychlé odkazy
  • Hlavní stránka
  • Seznam rubrik
  • Ankety
  • Editoriály
  • TOP 15
  • KONFERENCE 2008
  • KONFERENCE 2007
  • KONFERENCE 2006
  • KONFERENCE 2005
  • KONFERENCE 2004
  • Sborník
  • Testy
  • Virtuální školení
  • Personalizace


  • Hledáte práci?
    Hledáme redaktora - pojďte s námi tvořit Databázový svět!

    Vyhledávání

    Hledej
    na Databázovém světě!



    Rozšířené vyhledávání

    Rubriky
    Aktuality
    Bezpečnost
    Business
    Česká scéna
    Datové sklady
    Dokumentace
    Dotazovací jazyky
    Hardware
    Historie
    Komentáře
    Literatura
    Metodologie
    Nondb
    Open Source
    Poradna
    Produkty
    Případové studie
    Redakce
    Rozhovory
    Standardy
    Technologie
    Tipy - triky
    Tiskové zprávy
    Vývoj
    Vývojové nástroje
    Zajímavosti

    Co je to?
    Datový sklad
    Tento pojem poprvé formuloval koncem 80. let William Inmon jako strategii přístupu k datům určeným pro rozsáhlé analýzy. V případě datového skladu hovoříme o historických, časově rozlišených, agregovaných, průběžně rozšiřovaných datech uspořádaných pro podporu potřeb managementu.

    Akce
    Dynamická Datová Centra
    - na semináři se seznámíte s komplexním řešením a koncepcí Dynamických Datových Center od Fujitsu Siemens Computers se speciálním důrazem na řešení FlexFrame.

    Textová inzerce
    IBPhoenix - Vše o InterBase a Firebirdu.

    Smějete se rádi? - Pak je pro vás Vtipník to pravé!

    Prodejce reklamy - Hledáme schopného prodejce reklamního prostoru, možnost i externí spolupráce.

    Přihlášený čtenář
    Nepřihlášený čtenář

    O portálu
    Databázový svět
    ISSN: 1213-5933

    Web je optimalizován pro rozlišení 1024x768, nicméně kromě větších rozlišení podporujeme i 800x600. Podrobnosti najdete zde.

    Chcete-li mít kdykoliv možnost zkontrolovat obsah našeho portálu, můžete využít podporu rss. Podrobnosti najdete zde.
    Spuštění programu během akce v databázi


    [Tipy - triky] - Určitě to znáte. V databázi pomocí procedurálních rozšíření uděláte mnoho, avšak něco je lepší přenechat "klasickému" programu či službě. Jedním z poměrně obvyklých úkolů je spuštění programu při vykonání definované akce v databázi – typicky tisk vybraných dat po vložení apod. (a to především tehdy, pokud se jedná o uzavřenou aplikaci třetí strany). Dnes se podíváme na jedno obecné řešení a dvě řešení pro platformu Firebird.



    Obecných řešení je samozřejmě možné najít více, stejně tak na jiných platformách mohou být k dispozici nástroje buď s přímou tohoto úkolu, nebo se dají lehce "přemluvit".

    První, obecné řešení asi nebude nic překvapivého. V rámci triggeru nebo uložené procedury vložíme do speciální tabulky řádek s identifikací, co se má provést a případně identifikátory dat, jsou-li ke zpracování potřeba. V pravidelných intervalech, například 30 sekund, spouštíme náš program, který projde tabulku "úkolů" a vyřeší je. Jedná se o řešení velmi jednoduché, avšak má výhodu že funguje snad na všech databázích. Dá se samozřejmě lehce rozšířit pro specifické akce apod. Není ale tak obratné jako využití specifických prostředků databázové platformy.

    Pro Firebird jsou nejzajímavější dvě možnosti. První, velmi elegantní, využívá událostí rozesílaných klientům, kteří se k odběru přihlásili. Každá slušná programovací vrstva události podporuje – určitě nenarazíte v Delphi, .NETu, PHP, C/C++. Událost je identifikátor poslaný zainteresovaným stranám databázovým serverem předem domluveným kanálem. Na straně databáze využijeme příkazu POST_EVENT <identifikátor>, kde identifikátor je libovolný znakový řetězec (maximálně 78 znaků). K odběru události se stejným názvem se přihlásí aplikace. V .NETu by mohl kód vypadat takto:

    FbRemoteEvent revent = new FbRemoteEvent(connection);
    revent.AddEvents(new string[] { "new_order" });
    
    // Add callback to the Firebird events
    revent.RemoteEventCounts += new FbRemoteEventEventHandler(EventCounts);
    
    // Queue events
    revent.QueueEvents();
    
    static void EventCounts(object sender, FbRemoteEventEventArgs args)
    {
    	Console.WriteLine("Event {0} has {1} counts.", args.Name, args.Counts);
    }
    

    Řešení je tedy velmi elegantní a události jsou pro takovéto úkoly jako stvořené. Obslužná aplikace může běžet na úplně jiném stroji. Nevýhodou je, že události jsou rozesílány při commitu. O odvolaných transakcích – pokud jsou to pro vás důležité – se nedozvíte. Stejně tak k události nepřidáte žádná data. Potřebuje-li je program ke zpracování, musíme využít např. časových razítek, flagů apod.

    Druhé představované řešení přichází s, dalo by se říci, opačnými (ne)výhodami. Jde o využití přeložených programových modulů (*.dll/*.so) do tzv. uživatelsky definovaných funkcí – UDF. Tento modul může obsahovat libovolný kód, napsaný v libovolném jazyce znajícím volací konvenci stdcall – C/C++, Delphi, FreePascal. Vzhledem k tomu, že tento kód běží v kontextu serveru a blokuje další provádění, je vhodné, aby kód byl velmi jednoduchý – KISS = Keep It Simple Stupid. Pro náš příklad může být vhodné, aby i tato UDF pouze vyslala signál jiné aplikaci, která zbytek zpracování provede. Výhodou tohoto řešení je, že je možné předávat i data, která mohou být dále zpracována. Volání funkce se provádí okamžitě, a je tedy evidentní, že dojde ke zpracování i dat transakce, která může být následně odvolána.

    Některé platformy poskytují přímou podporu, jiné nabízí prostředky pro snadnější realizaci, ale i v případě nulové pomoci ze strany databáze si každý správný databázový vývojář dokáže poradit.

    ( Celý článek! | Autor: Jiří Činčura | Počet komentářů: 1 | Přidat komentář | Informační e-mailVytisknout článek )

    Vyhledávání
     

    Anketa
    Kolik ročně utratíte za dovolené?

    Nic 
     (1505 hl.)
    Do 1 000,- Kč 
     (1044 hl.)
    Do 10 000,- Kč 
     (978 hl.)
    Do 25 000,- Kč 
     (1346 hl.)
    Do 50 000,- Kč 
     (994 hl.)
    Do 75 000,- Kč 
     (1150 hl.)
    Více než 75 000,- Kč 
     (991 hl.)

    Celkem hlasovalo: 8008


    Poslední komentáře
    frontierd@126.com
    frontierd@126.com
    frontierd@126.com
    c
    http://www.coachoutl

    Newsletter
    Přihlaste si nezávazně - i bez registrace - odběr informačního newsletteru. Podrobné informace najdete zde.

    Emailová adresa:


    Kalendář
    <<  Prosinec  >>
    PoÚtStČtSoNe
        123
    45678910
    11121314151617
    18192021222324
    25262728293031

    Redakci připojuje


    Nejčtenější

    Databáze je prázdná!


    Nejvíce komentářů

    Databáze je prázdná!


    Reklama






    Nenechte si ujít články na dalších webech




    Na této stránce použité názvy programových produktů, firem apod. mohou být ochrannými známkami
    nebo registrovanými ochrannými známkami příslušných vlastníků.

    Databázový svět | dfKlub - digitální fotografie | Vtipník - vtipy přímo k Vám | Reminder - přestaňte zapomínat | Databázový svět

    Copyright (c) 2004 AVRE Publishing, spol. s r.o. Všechna práva vyhrazena