Zapytanie w sprawie bazy

Baza FastObject współpracuje także z obiektami napisanymi w C++. Występują tu jednak pewne ograniczenia (związane głównie z mechanizmem wielokrotnego dziedziczenia w C++). Firma Poet opracowała specjalny interfejs (PtQL), który pozwala wyszukać z poziomu C++ obiekty o danej charakterystyce. Można także łączyć kwerendy PtQL i np. OQL.

Wśród baz hierarchicznych warto wymienić mało popularny, ale bardzo ciekawy motor Tamino Software AG. To baza oparta na plikach XML.Schemat bazy jest definiowany jako dokument DTD (w nowej wersji motoru - XSD). Językiem zapytań jest zaś Query/XPatch.

W praktyce baz relacyjnych okazało się, że dokumenty XML, które trzeba by przechowywać w bazie, wystarczy umieścić w specjalnym typie pola. Mechanizm powoduje, że motor bazy pozwala w efektywny sposób zawrzeć zapytanie XPath analizujące dany dokument we frazie WHERE. Jednak ze względu na optymalizację często 'odpytywane' elementy są zwykle wyciągane z dokumentu XML w czasie dodawania czy aktualizacji danych i umieszczane w oddzielnych polach relacyjnej tabeli. Wówczas w klauzuli WHERE są odpytywane wspomniane dodatkowe pola.

Obecnie bazy danych pozwalają, by dane relacyjne mogły być 'widziane' jako dokumenty XML. Na przykład Oracle 9i może przechowywać niejako dwie równoległe struktury bazodanowe i dwa zestawy indeksów: dla danych relacyjnych i XML.

Caché - prawie ideał

Dla programisty, przyzwyczajonego do baz relacyjnych, bazy hierarchiczne czy obiektowe są trudne do zrozumienia. Motor, który doskonale łączy te dwa światy, wydaje się niedoścignionym ideałem. Okazuje się jednak, że rozwiązania idealne istnieją.

Caché jest bazą danych, stosowaną zwykle w systemach czasu rzeczywistego, m.in. w medycynie. Do przechowywania informacji wykorzystuje wielowymiarowe tablice, w których dane są wstępnie posortowane według różnych kryteriów. Dzięki temu aktualizacja czy odczyt danych nie wymagają czasochłonnego wyliczania operacji złączenia i sprowadzają się do wskazania "indeksów". Dane zapisane w ten sposób zajmują tylko nieco więcej miejsca. Mechanizm DCP (Distributed Cache Protocol <\i>) przyspiesza odczyt danych - sprawia, że jeżeli klient żąda określonej porcji wierszy, automatycznie otrzymuje także powiązane z nimi przez relacje.

Jednak to co jest najciekawsze w Caché, to mechanizm udostępniania danych programiście. Mechanizm UDA (Unified Data Architecture$) udostępnia każdy obiekt bazodanowy jako element w danym języku programowania. Może to być obiekt Javy, C++, ActiveX, .Net, CORBA, XML - odpowiada za to sam motor bazy danych. Baza wspiera hermetyzację, wielokrotne dziedziczenie, polimorfizm, referencje, relacje pomiędzy obiektami i obsługę grup obiektów.

Mimo tych cech, motor Caché nadal pozostaje bazą relacyjną. Jeżeli programista chce, to może nadal wybierać informacje przy użyciu SQL itp. Jednocześnie może określić też ciąg atrybutów wybieranego obiektu.

Taki mechanizm producent Caché nazywa modelem postrelacyjnym lub też transakcyjno-wielowymiarowym. Dzięki temu, że struktura obiektu nie jest płaska, znacznie zredukowane są konieczne blokady wynikające np. z aktualizacji obiektu wykorzystującego wielokrotne dziedziczenie. Równocześ-nie cały czas jest dostępny schemat tabelaryczny danych.

PostgreSQL i MySQL

Wśród baz open source zdecydowanie najpopularniejsze są dwie: MySQL i PostgreSQL.

Baza MySQL powstała jako następca mSQL - prostej baz danych wykorzystującej procedury do obsługi baz plikowych ISAM. Później dodano do niej elementy SQL. Ubogie możliwości MySQL w porównaniu z innymi motorami to nie wynik zaniedbania, lecz przyjętych założeń. Użytkownik nie może np. definiować funkcji czy procedur składowanych. Baza dysponuje natomiast wygodnymi mechanizmami współpracy z innymi środowiskami, w tym z C/C++, Javą, Perl i PHP. Tego typu API pozwalają w łatwy sposób dynamicznie zbudować odpowiednią kwerendę. W rezultacie nakłada to na programistę obowiązek sprawdzania wszystkich przekazanych parametrów, by zapobiec tzw. błędowi SQL Injection. Aby ich uniknąć, wystarczy jednak posłużyć się procedurami składowanymi.

MySQL wykorzystuje wewnętrznie kilka różnych typów przechowywania informacji. Najstarsze, czyli tabele MyISAM, nie pozwalają na transakcyjność, ale za to działają najszybciej. InnoDB jest nowym (od wersji 3.23.34a) sposobem zapisu danych w pełni zgodnym z ACID (podstawowe cechy transakcji zapewniające spójność, izolację, trwałość oraz atomizację operacji). Jeszcze inną metodą są np. bazy HEAP, które w całości są umieszczone w pamięci operacyjnej. Wybierając jeden motor bazy, programista może więc tworzyć wiele typów baz danych pod kątem różnych zastosowań.


TOP 200