http://postgres.cz/index.php?title=T%C3%A9mata_diplomov%C3%BDch_prac%C3%AD&feed=atom&action=historyTémata diplomových prací - Historie editací2024-03-28T09:38:04ZHistorie editací této stránkyMediaWiki 1.36.0http://postgres.cz/index.php?title=T%C3%A9mata_diplomov%C3%BDch_prac%C3%AD&diff=431&oldid=previmported>Pavel v 31. 3. 2021, 16:552021-03-31T16:55:41Z<p></p>
<p><b>Nová stránka</b></p><div>Řada open source projektů má vazby na prostředí univerzit a vysokých škol. PostgreSQL není výjimkou. Tento projekt vznikl v univerzitním prostředí - pod vedením profesora Computer Science Michaela Stonebrakera vznikl nový databázový systém, který sloužil jako platforma pro experimentální rozšíření klasického konceptu relačních databází o objektové principy. V rámci disertační prace Andrewa Yu a Jolly Chena byl Postgres rozšířen o jazyk SQL a vznikl tak systém PostgreSQL. Kód PostgreSQL se stále s oblibou používá v pro výuku návrhu a realizace relačních databázových systémů, případně pro ověřování některých moderních konceptů zpracování dat (např. proudové databáze). Na PostgreSQL je stále co vylepšovat, a to je zároveň příležitost pro studenty, jak spojit příjemné s užitečným - napsat kus sw, který se bude dále široce používat a zároveň pracovat na svých diplomové, bakalářských nebo disertačních pracích. Studenti studující informatiku si mohou vybírat z následujícího seznamu témat:<br />
<br />
== Implementace blokového zpracování dotazů v databázovém systému PostgreSQL ==<br />
'''Vedoucí:''' Pavel Stěhule<br />
<br />
Exekuční plán v databázovém systému PostgreSQL je v současnosti vykonáván iteracemi po řádcích,<br />
t.j. pro každý záznam, který má být součástí výsledku dotazu je vykonán celý exekuční plán. Cílem<br />
práce je implementace procedur pro vykonávání dotazu tak, aby se dotaz vykonával iteracemi po<br />
blocích a porovnání vlastností a efektivnosti nové implementace se stávající.<br />
<br />
Literatura:<br />
# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf<br />
# Gerhard Weikum, Gottfried Vossen: Transactional Information Systems,Morgan Kaufman 2002<br />
<br />
== Procedurální rozšíření jazyka SQL v systému PostgreSQL ==<br />
'''Vedoucí práce''': Pavel Stěhule<br />
<br />
Cílem práce je rozšířit funkčnost SQL o procedurální konstrukce a funkce definované v SQL/PSM:<br />
proměnné, cykly, větvení, a to tak, aby tyto konstrukce bylo možné používat i mimo kontext SQL<br />
procedur a funkcí. Volně tyto konstrukce můžeme např. používat v T-SQL. V tomto pojetí je význam<br />
procedur pouze v tom, že umožňují parametrizaci (proti např. PL/SQL, kde procedurální konstrukce<br />
jsou dostupné pouze v proceduře nebo funkci).<br />
<br />
DECLARE a integer;<br />
SELECT INTO a x1<br />
FROM Foo;<br />
nebo<br />
FOR SELECT sequence_name FROM information_schema<br />
DO<br />
DECLARE min integer;<br />
EXECUTE 'SELECT min_value FROM ' || sequence_name ' INTO min';<br />
EXECUTE 'ALTER SEQUENCE ' || sequence_name<br />
|| ' RESTART WITH ' || min;<br />
END FOR;<br />
<br />
* podpora session proměnných:<br />
* rozšíření příkazů DECLARE a SET<br />
* možnost používat proměnné v SQL příkazech<br />
* podpora řídících konstrukcí: cykly, větvení<br />
* podpora příkazů IF, CASE<br />
* podpora cyklů LOOP, WHILE, REPEAT<br />
* podpora cyklu FOR<br />
<br />
Literatura:<br />
# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf<br />
# Jim Melton: Understanding SQL Stored Procedures: A Complete Guide to SQL/PSM, Morgan Kaufmann 1998<br />
# Gerhard Weikum, Gottfried Vossen: Transactional Information Systems,Morgan Kaufman 2002<br />
# ANSI SQL:2003 standard<br />
<br />
== Podpora SQL/PSM modulů v systému PostgreSQL ==<br />
'''Vedoucí práce:''' Pavel Stěhule<br />
<br />
Cílem práce je implementace modulů dle SQL/PSM v PostgreSQL. Moduly (jak je patrno z názvu)<br />
slouží k modularizaci kódu uložených procedur. Moduly umožňují zapouzdření procedur, tabulek,<br />
dočasných tabulek, proměnných. Zásadní rozdíl mezi modulem a schématem je možnost opakovaného<br />
použití modulů v různých databázích (tak jako se používají knihovny).<br />
<br />
Literatura:<br />
# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf<br />
# Jim Melton: Understanding SQL Stored Procedures: A Complete Guide to SQL/PSM, Morgan Kaufmann 1998<br />
# Gerhard Weikum, Gottfried Vossen: Transactional Information Systems,Morgan Kaufman 2002<br />
# ANSI SQL:2003 standard<br />
<br />
== Implementace cache na úrovni výsledků dotazů ==<br />
'''Vedoucí práce:''' Pavel Stěhule<br />
<br />
Cílem je navrhnout a implementovat řešení uložení výsledků SQL dotazů do cache, s cílem eliminovat<br />
vyhodnocení pokud se vstupní data (data v tabulkách) nezměnila. To v případě systémů ve kterých<br />
výrazně převažuje čtení (jako jsou např. webové aplikace apod.) výrazně přispívá ke zvýšení výkonu.<br />
<br />
Obdobnou funkčnost má implementovánu např. MySQL pod názvem Query Result Cache.<br />
<br />
Literatura:<br />
# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf<br />
# MySQL Reference Manual / Query Result Cache, http://dev.mysql.com/doc/refman/5.1/en/query-cache.html<br />
<br />
== Implementace cache na úrovni výsledků funkcí ==<br />
'''Vedoucí práce:''' Pavel Stěhule<br />
<br />
Cílem je navrhnout a implementovat řešení uložení výsledků funkcí do cache, s cílem eliminovat opakované<br />
vyhodnocení funkce pokud se vstupní data (data ve čtených tabulkách a parametry funkce) nezměnily. To v<br />
případě systémů ve kterých výrazně převažuje čtení (jako jsou např. webové aplikace apod.) výrazně přispívá<br />
ke zvýšení výkonu.<br />
<br />
Obdobnou funkčnost má implementovánu např. Oracle pod názvem Function Result Cache.<br />
<br />
CREATE OR REPLACE FUNCTION custfce(integer)<br />
RETURNS SETOF integer AS $$<br />
#option memcache($1) expiration 5min<br />
BEGIN<br />
RETURN QUERY SELECT a FROM foo WHERE a = $1;<br />
END;<br />
$$ LANGUAGE plpgsql;<br />
<br />
Literatura:<br />
# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf<br />
# Oracle Function Result Cache, http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/subprograms.htm#BABFHACJ<br />
<br />
== Implementace kolekcí v PL/pgSQL ==<br />
'''Vedoucí práce:''' Pavel Stěhule<br />
<br />
Cílem je implementace nového datového typu (slovníku) a jeho podpora v PL/pgSQL. Tento nový<br />
datový typ by měl být použitelný i v ostatních PL jazycích PostgreSQL. Podpora kolekcí v PL/pgSQL<br />
by měla být kompatibilní s podporou kolekcí v PL/SQL.<br />
<br />
Literatura:<br />
# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf<br />
# ANSI SQL:2003 standard<br />
<br />
== Implementace příkazu MERGE v systému PostgreSQL ==<br />
'''Vedoucí práce:''' Pavel Stěhule<br />
<br />
Tento příkaz zajišťuje změnu specifikovaných dat. Pokud tato data neexistují, tak jsou do tabulky<br />
přidána. Příklad: inkrement materializované tabulky<br />
<br />
CREATE OR REPLACE FUNCTION inc(_key integer)<br />
RETURNS void AS $$<br />
DECLARE _v integer;<br />
BEGIN<br />
LOCK mattab;<br />
UPDATE mattab SET v = v + 1 WHERE key = _key;<br />
IF NOT FOUND THEN<br />
INSERT INTO mattab VALUES(_key, 1);<br />
END IF;<br />
END;<br />
<br />
Ukázková implementace je robustní nicméně vzhledem k zamknutí tabulky není 'příliš efektivní.<br />
Podstatně efektivnější implementace se dosáhne implementací na úrovni indexů - souvislost s<br />
mechanismem jištění unikátnosti hodnot v unikátních indexech je zřejmá (podmínkou implementace je<br />
unikátní index v tabulce).<br />
<br />
MERGE INTO table_name USING table_name ON (condition)<br />
WHEN MATCHED THEN UPDATE SET column1 = value1 [, column2 = value2 ...]<br />
WHEN NOT MATCHED THEN INSERT column1 [, column2 ...]<br />
VALUES (value1 [, value2 ...])<br />
Literatura:<br />
# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf<br />
# ANSI SQL:2008 standard<br />
<br />
== Implementace referencování a dereferencování v PostgreSQL ==<br />
'''Vedoucí práce:''' Pavel Stěhule<br />
<br />
SQL99 obsahuje koncept podporující OOP aplikace na úrovni SQL. Tento koncept narušuje zažité<br />
zvyklosti a vzory pro základní operace s daty a skrývá jistou složitost SQL před uživateli (o totéž se<br />
snaží ORM).<br />
<br />
CREATE TABLE Deti (<br />
id serial PRIMARY KEY,<br />
rodic REF (Rodice) SCOPE Rodice,<br />
jmeno varchar(30),<br />
...<br />
SELECT jmeno, prijmeni, rodic->jmeno, rodic->prijmeni<br />
FROM Deti; -- system provede automaticky pripojeni tab. Rodice<br />
<br />
Literatura:<br />
# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf<br />
# Gerhard Weikum, Gottfried Vossen: Transactional Information Systems,Morgan Kaufman 2002<br />
# ANSI SQL:2003 standard<br />
<br />
== Porovnání databázových úložišť ==<br />
'''Vedoucí práce:''' ----<br />
<br />
Cílem práce je porovnat jednotlivé modely ukládání dat v různých SŘBD (PostgreSQL, Firebird,<br />
MySQL, Oracle ...) a popsat jejich výhody a nevýhody. Dále se zaměřit na to jak je řešena obnova po<br />
výpadku systému.<br />
<br />
Literatura:<br />
# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf<br />
# Gerhard Weikum, Gottfried Vossen: Transactional Information Systems,Morgan Kaufman 2002<br />
# Robert Mach: Design of Integrity Check And Repair Algorithms For PostgreSQL Data File, DP FEL CVUT, 2008<br />
<br />
== Rozšíření transakčních vlastností ==<br />
'''Vedoucí práce:''' ----, Pavel Stěhule<br />
<br />
Implementujte Repeatable Read Isolation Level a Autonomní transakce do PostgreSQL<br />
Autonomní transakce umožňují samostatné potvrzení subtransakce. Často se používají (a zásadně<br />
zjednodušují) práci s databázemi workflow aplikací. Další oblastí, kde se AT používají, je logování a<br />
audit databází.<br />
<br />
BEGIN AUTONOMOUS TRANSACTION;<br />
INSERT INTO log(note) VALUES('Uzivatel se pokusil o ...');<br />
COMMIT;<br />
<br />
Literatura:<br />
# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf<br />
# Gerhard Weikum, Gottfried Vossen: Transactional Information Systems,Morgan Kaufman 2002<br />
<br />
== Úprava embeded C pro rozhrani SPI ==<br />
'''Vedoucí práce:''' Pavel Stěhule<br />
<br />
PostgreSQL nabízí tzv. embeded C, což je preprocesor C umožnující integraci SQL do C. Aktuálně je<br />
podporováno pouze klientské rozhraní, tudíž tuto funkcionalitu nelze použít pro uložené procedury.<br />
Cílem je upravit stávající preprocesor tak, aby se místo klientského rozhraní použilo rozhraní SPI a<br />
vygeneroval kód, který lze spustit na straně serveru.<br />
<br />
Literatura:<br />
# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf<br />
<br />
== Podpora globální dočasných tabulek ==<br />
'''Vedoucí práce:''' Pavel Stěhule<br />
<br />
Životnost dočasných tabulek je limitovaná session uživatele. Po uzavření session jsou všechny dočasné<br />
tabulky odstraněny. Takto navržené tabulky lze poměrně jednoduše implementovat, mají však několik<br />
podstatných nevýhod: a) před každým použitím je nutné tyto tabulky vytvořit znovu, což komplikuje<br />
kód aplikační kód (je třeba zjistit, zda-li tabulky existují a podle toho se zařídit) zvláště vzhledem ke<br />
skutečnosti, že PostgreSQL nepodporuje databázové triggery (trigger na událost přihlášení a odhlášení<br />
uživatele). b) díky tomu, že se neustále vytváří a ruší, tak dochází k častým operacím update<br />
v systémových tabulkách (v některých aplikacích i několik set krát během 1 sec), což si vynucuje<br />
častější vacuum, což se negativně projeví na výkonu.<br />
<br />
Úkolem práce je navrhnout a realizovat tzv. globální dočasné tabulky, které z hlediska životního cyklu<br />
se chovají stejně jako klasické tabulky, a z hlediska obsahu se chovají jako dočasné tabulky, tj. každý<br />
uživatel má vlastní obsah, který po ukončení session zaniká. Je třeba preferovat výkon, takže je potřeba<br />
navrhnout takové řešení, kde by nedocházelo k fyzické modifikaci systémových tabulek a zároveň<br />
minimalizovat nezbytné změny v PostgreSQL (což je obvyklý požadavek).<br />
<br />
Literatura:<br />
# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf<br />
# ANSI SQL:2003 standard<br />
<br />
== Integrace runtime Parrot do PostgreSQL ==<br />
'''Vedoucí práce:''' Pavel Stěhule<br />
<br />
Prostředí parrot vzniklo při vývoji jazyka Perl6. Parrot představuje univerzální runtime (včetne JIT) pro řadů jazyků (zejména Perl6, ale i BASIC, LUA a další). Cílem práce je napsat překladač jazyka PL/pgSQL nebo PL/pgPSM pro toto prostředí. K těmto jazykům je k dispozici parser. Výsledkem práce je překladač a posouzení rychlosti stávajícího řešení a řešení postaveného nad parrotem.<br />
<br />
Literatura:<br />
http://www.parrotblog.org/2008/03/targeting-parrot-vm.html<br />
<br />
== Využití runtime jazyka Lua pro PL/pgSQL ==<br />
'''Vedoucí práce:''' Pavel Stěhule<br />
<br />
Jazyk Lua obsahuje malý a výkonný runtime. Cílem diplomové práce je integrace tohoto runtime do PostgreSQL včetně jeho použití pro No SQL procedury v jazyce PL/pgSQL nebo PL/pgPSM. K těmto jazykům je k dispozici parser. Výsledkem práce je překladač a posouzení rychlosti stávajícího řešení a řešení postaveného nad Lua VM.<br />
<br />
Literatura:<br />
# http://www.lua.org/pil/<br />
# http://www.root.cz/clanky/lua-vestavitelny-minimalista/<br />
# http://luajit.org/<br />
# http://foja.dcs.fmph.uniba.sk/kompilatory/docs/compiler.pdf<br />
# http://docs.linux.cz/misc/skolicky/skolicka2.html<br />
<br />
== Překladač PL/pgSQL procedur do jazyka C ==<br />
<br />
'''Vedoucí práce:''' Pavel Stěhule<br />
<br />
PostgreSQL obsahuje interpret jazyka PL/pgSQL. Cílem práce je vytvoření překladače do programovacího jazyka C a demonstrace tohoto překladače pro praktické použítí. K dispozici je parser jazyka PL/pgSQL jehož výsledkem je AST (Abstract Syntax Tree). Výsledkem práce je porovnání rychlosti zpracování funkcí přeložených z C vůči stávajícímu interpretu PL/pgSQL.<br />
<br />
Literatura:<br />
# http://docs.linux.cz/misc/skolicky/skolicka2.html<br />
# http://foja.dcs.fmph.uniba.sk/kompilatory/docs/compiler.pdf<br />
# http://tldp.org/HOWTO/GCC-Frontend-HOWTO.html#toc3<br />
# http://www.linuxjournal.com/article/7884<br />
# http://gcc.gnu.org/frontends.html<br />
# http://palestras.gustavobarbieri.com.br/gcc-front-end/fisl-2006/intro.pdf<br />
<br />
== Interpret a JIT překladač PL/pgSQL NO SQL procedur s využitím LLVM ==<br />
'''Vedoucí práce:''' Pavel Stěhule<br />
<br />
[http://www.llvm.org/ProjectsWithLLVM/ LLVM] je prostředí pro tvorbu překladačů. PostgreSQL obsahuje interpret jazyka PL/pgSQL. Cílem práce je vytvoření překladače do kódu virtuálního stroje LLVM a demonstrace tohoto překladače pro praktické použítí. K dispozici je parser jazyka PL/pgSQL jehož výsledkem je AST (Abstract Syntax Tree). Výsledná práce musí obsahovat výkonnostní srovnání stávajícího stavu a řešení postaveného nad LLVM.<br />
<br />
Literatura:<br />
# http://staff.polito.it/silvano.rivoira/HowToWriteYourOwnCompiler.htm<br />
<br />
== Validace XML Type proti DTD, XSD, RNG ==<br />
'''Vedoucí práce:''' Petr Chmelař<br />
<br />
Ve verzi 9 tuto možnost XML Type nemá. V práci jde o integraci těchto funkcí prostřednictvím otevřených knihoven.<br />
<br />
Literatura:<br />
# http://www.postgresql.org/docs/9.0/static/datatype-xml.html<br />
# http://www.relaxng.org/<br />
<br />
== Návrh a implementace Překladače a exekutoru jazyka MDX pro prostředí PostgreSQL ==<br />
'''Vedoucí práce:''' Pavel Stěhule<br />
<br />
Cílem práce je navrhnout a implementovat překladač jazyka MDX (MultiDimensional eXpressions) pro RDBMS PostgreSQL. Implementace by měla končit vytvořením jednoduchého serveru protokolově kompatibilního s PostgreSQL zvládajícího přijmutí MDX dotazu, jeho zpracování a překlad na SQL příkazy zpracované určeným SQL serverem, a odeslání výsledku zpět ke klientu. Server musí zvládat nativní komunikaci s PostgreSQL klientem - tak aby bylo možné se k serveru připojit z SQL konzole ''psql''. <br />
<br />
Literatura:<br />
*http://en.wikipedia.org/wiki/MultiDimensional_eXpressions<br />
*http://www.mosha.com/msolap/mdx.htm<br />
*http://www.databasejournal.com/article.php/1459531/<br />
*http://developer.postgresql.org/pgdocs/postgres/protocol.html<br />
*http://www.gnu.org/software/bison/<br />
*http://www.antlr.org/grammar/1101743472259/mdparser.g<br />
<br />
== Návrh a implementace wite once případně append only engine ==<br />
'''Vedoucí práce:''' Pavel Stěhule<br />
<br />
Velké množství dat v databázi není nikdy upravováno, a ani se nepředpokládá jejich úprava - např. naměřená data. Uložení takových to dat v Postgresu v podobě normalizovaných tabulek není příliš efektivní - každý řádek totiž obsahuje 23 byte velkou signaturu, která zajišťuje podporu MVCC, kterýžto mechanismus se ovšem u takových to dat neuplatní. Cílem je upravit Postgres tak, aby umožňoval efektivní uložení vědeckých dat, přičemž tato data se nikdy nebudou upravovat - není nutné podporovat operace UPDATE a DELETE. Pokud dojde k připojení nových dat, tak se bude jednat o větší dávkovou operaci (nad desítky KB). K implementaci je možné využít i FDW interface.<br />
<br />
Literatura:<br />
* https://bitbucket.org/adunstan/blackhole_fdw<br />
<br />
== Návrh a implementace loose index scanu ==<br />
'''Vedoucí práce:''' Pavel Stěhule<br />
<br />
Aktuálně PostgreSQL neumí využít index pro optimalizaci výrazů obsahující klauzuli DISTINCT. Cílem práce je zjistit důvody tohoto chování a navrhnout a připravit efektivní implementaci příkazu COUNT(DISTINCT) pokud je k dispozici index. Postgres umí využívat indexy pro agregační funkce -- např. pro funkce MIN, MAX - nicméně COUNT(DISTINCT) není zatím operace podporovaná indexem.<br />
<br />
== Další možná témata ==<br />
* Použití JIT v expression executoru a SQL executoru<br />
* Implementace pipelined DML dle ANSI SQL<br />
<pre><br />
SELECT oldtbl.empno FROM OLD TABLE (DELETE FROM emp WHERE deptno = 2) AS oldtbl;<br />
SELECT newtbl.empno FROM NEW TABLE (UPDATE emp SET salary = 0 WHERE deptno = 2) AS newtbl;<br />
</pre></div>imported>Pavel