Linux E X P R E S

Facebook

Relační databázový systém Firebird – výhled do budoucna

Relační databázový systém Firebird je založen na zdrojových textech systému InterBase, uvolněných společností Borland v létě roku 2000, a patří spolu s MySQL a PostgreSQL mezi nejpopulárnější open source databázové platformy.


Firebird je vyvíjen v rámci open source projektu stejného jména s centrálou na SourceForge (http://firebird.sourceforge.net/), který k dnešnímu dni sdružuje více než 70 vývojářů z celého světa, včetně několika původních autorů InterBase a bývalých vývojářů firmy Borland. Projekt je finančně podporován neziskovou organizací FirebirdSQL Foundation (http://www.firebirdsql.org/foundation/) a sdružením zainteresovaných firem. V rámci projektu Firebird jsou vedle samotného databázového systému vyvíjeny i ovladače pro .NET, JDBC a ODBC.

Loni na jaře byla uvolněna dlouho očekávaná verze 1.5, postavená na nových zdrojových textech v jazyce C++, a ačkoliv se jedná o důležitý milník pro vývojáře i celý projekt, nejedná se o konečné stádium vývoje nového jádra Firebirdu. Podle původního záměru a představ vývojářů mělo být toto nové jádro kompletní ve verzi 2.0, naplánované na začátek příštího roku. Na podzim roku 2003 ovšem došlo k dvěma významným událostem, které si vynutily přehodnocení původních záměrů.

První událostí bylo sloučení projektu Yaffil s projektem Firebird. Yaffil vznikl v roce 2002 jako samostatná odnož Firebirdu 1.0 udržovaná několika vývojáři pouze pro potřeby uživatelů v Ruské Federaci (tento produkt byl dostupný pouze pro Windows). Díky licenci IPL byla specifická rozšíření a vylepšení implementovaná v Yaffilu čistě komerční, a nebyla tedy pro projekt Firebird dostupná. Samostatný vývoj Yaffilu byl na podzim loňského roku ukončen, a kompletní zdrojové texty byly poskytnuty projektu Firebird.

Několik dní po této neočekávané události oznámil Jim Starkey, původní autor InterBase, že začal pracovat na 64-bitové verzi Firebirdu s kódovým označením Vulcan. Primárně je Vulcan určen pro platformy Solaris, Linux a Windows XP, a má zásadně přepracovanou a modernizovanou vnitřní architekturou optimalizovanou pro SMP. Původně měla být tato verze k dispozici již v průběhu letošního dubna, ale kvůli rozsahu nezbytných změn bylo její uvedení posunuto na konec tohoto roku. Vulcan je vyvíjen odděleně od probíhajícího vývoje Firebirdu 2, a nejdříve bude k dispozici jako samostatný open source produkt, který bude následně sloučen s Firebirdem.

Vývoj Firebirdu tedy nyní probíhá současně v třech samostatných větvích:

  1. Údržbová větev verze 1.5. Z této větve vzešla nová verze 1.5.1 uvolněná v červenci tohoto roku.
  2. Hlavní větev (head), ve které již zhruba rok probíhají práce na verzi 2.0. Práce v této větvi se soustřeďují především na renovaci vnitřní struktury databáze a nové vlastnosti, včetně začlenění vybraných vlastností a vylepšení z projektu Yaffil.
  3. Vulcan se odštěpil z hlavní větve v únoru tohoto roku, a ačkoliv přináší i některé nové vlastnosti oproti verzi 1.5, je orientován především na kompletní modernizaci vnitřní architektury serveru směrem k SMP a 64-bitovým systémům.

Původní představa o finální podobě verze 2.0 odpovídá spojení větví Firebird a Vulcan. Množství práce spojené s dokončením a následným spojením obou větví je ovšem tak velké, že by oddálilo uvedení nové verze Firebirdu nejméně o rok. Proto byl původní záměr dokončit transformaci jádra systému již ve verzi 2.0 přehodnocen. Podle současného plánu bude v nejbližší době „zmražen“ vývoj v hlavní větvi Firebirdu, a veškeré práce se soustředí na uvolnění tohoto kódu jako verze 2.0 ještě do konce tohoto roku. Po uvedení této verze bude Firebird sloučen s projektem Vulcan do nové verze 3.0, předpokládaným uvedením ke konci příštího roku.

Protože má být nová verze uvolněna již letos nebo nejpozději začátkem příštího roku, bylo nezbytné slevit z množství plánovaných nových vlastností. Následující vlastnosti jsou již dokončeny nebo jsou v pokročilém stádiu rozpracovanosti, a mají tedy značnou naději že se ve verzi 2.0 objeví. Definitivní seznam nových vlastností Firebirdu 2.0 ovšem zatím nebyl přesně specifikován.

Odvozené tabulky

Odvozené tabulky (nezaměňovat s dočasnými tabulkami) jsou takové tabulky, které jsou vytvářeny „za pochodu“ v rámci příkazu SELECT, a mohou být používány jako normální tabulky nebo pohledy. Odvozené tabulky existují pouze v paměti, a mohou být využívány pouze v rámci příkazu SELECT v němž jsou definovány.

Například následující dotaz vypíše seznam manažerů jejichž oddělení mají více než 25 zaměstnanců. Dotaz obsahuje subdotaz, který generuje odvozenou tabulku (pojmenovanou jako D) která je spojena s tabulkou zaměstnanců:

select e.name, d.department from employees e
join (select d1.department, d1.mgr_id from departments d1
join employees e1 on (d1.dept_id = e1.dept_id) group by
d1.department, e1.emp_id having count (*) > 25) d on (d.mgr_id = e.emp_id)

Nová struktura indexů

Množství práce na nové verzi je zaměřeno na zlepšení práce s indexy. Součástí je i změna vnitřní reprezentace B-stromů, což vyžaduje změnu vnitřní struktury databáze.

Selektivita indexů po segmentech

Pro každý index je v současnosti udržována pouze jediná hodnota selektivity, což v případě složených indexů představuje selektivitu indexu jako celku. Selektivita složených indexů může být velmi vysoká, ačkoliv když selektivita jednotlivých složek indexu může být naopak velmi nízká. Při rozhodování o použití části složeného indexu pro optimalizaci dotazu, může optimalizátor díky falešné hodnotě selektivity rozhodnout o použití indexu i v takovém případě, že jeho použití není vhodné. Uchovávání selektivity indexů po jednotlivých segmentech umožní optimalizátoru mnohem přesnější posouzení vhodnosti indexu.

Nový způsob kódování čísel záznamů

Jedná se o změnu ve struktuře databáze, které odstraňuje současné omezení počtu řádků v tabulce.

Automatické přetypování v SELECT UNION

Podle současných pravidel je nutné explicitně přetypovat položky s různými datovými typy na shodný typ pro výstupní položku příkazu SELECT UNION. Například:

SELECT CAST(VarCharField30 AS VARCHAR(30)) FROM Table1 UNION ALL
SELECT CAST(VarCharField10 AS VARCHAR(30)) FROM Table1

Nově by měly být vstupní položky automaticky přetypovány na největší typ.

Příkaz EXECUTE BLOCK

Nový příkaz umožňuje vykonání nepojmenovaného bloku kódu v jazyce PSQL. Navržená syntaxe:

EXECUTE BLOCK [ (param datatype = ?, param datatype = ?, ...) ] [ RETURNS (param datatype, param datatype, ...) } AS [DECLARE VARIABLE var datatype; ...] BEGIN

...

END

Nové fyzické a víceúrovňové přírůstkové zálohování

Vedle standardního nástroje gbak byl vytvořen nový nástroj nbackup, který umožňuje přírůstkové zálohování na několika úrovních. Na rozdíl od gbak který vytváří logickou zálohu obsahu databáze, pracuje nbackup na fyzické úrovni databázových stránek.

Indexy na bázi výrazu

V současnosti lze definovat indexy pouze na celé položky. Nově bude možné definovat indexy pomocí výrazu (např. index na SUBSTRING). Tento kód pochází z projektu Yaffil.

Nové interní funkce

Z projektu Yaffil bude převzato cca 40 nových interních funkcí. Jedná se především o funkce které jsou nyní k dispozici v externích knihovnách fbudf a ib_udf, a několik zcela nových funkcí.

Mimo výše uvedených vlastností je plánována i řada „drobných“ vylepšení, především v zabezpečení serveru, optimalizátoru dotazů, správě paměti apod. Kompletní seznam aktuálně posuzovaných vlastností naleznete na webových stránkách projektu.

Diskuze (0) Nahoru