Motor za darmo

Inprise/Borland udostępnił wersję beta InterBase 6. Nowy serwer ma być bezpłatnie dostępny na zasadach open source.

Inprise/Borland udostępnił wersję beta InterBase 6. Nowy serwer ma być bezpłatnie dostępny na zasadach open source.

Projektując nowy serwer, programiści Borlanda położyli nacisk na zgodność ze standardami. InterBase 6 (IB6) jest więc w pełni zgodny z SQL 92. Obsługuje kaskadowe związki integralności, wyzwalacze, prawa dostępu oparte na rolach itp. Co ciekawsze, zarówno serwer, jak i oprogramowanie instalowane po stronie klienta mają możliwość zablokowania "niestandardowych" rozszerzeń wprowadzonych przez Borlanda, co powoduje, że tworzona aplikacja musi być zgodna ze standardem.

Architektura motoru

Wykonując operacje, InterBase 6 blokuje poszczególne rekordy, a nie całe strony w bazie. Można włączyć po stronie serwera "optymistyczne" blokowanie, które powoduje, że przetwarzane rekordy są blokowane tylko w momencie wykonywania aktualizacji danych, a nie np. na początku transakcji.

IB6 może przechowywać kilka wersji jednego rekordu. Dzięki temu nie jest konieczna blokada rekordów w czasie odczytu. Jeżeli równocześnie kilka procesów czyta dany rekord, a inny modyfikuje go, to procesom czytającym zwracana jest kopia rekordu przed wprowadzeniem zmian. Proces aktualizujący zmienia wartość oryginalnego rekordu. Po zakończeniu operacji odczytu, wersje tymczasowe są usuwane, a zostaje tylko wersja zmodyfikowana. Transakcje w IB6 mogą obejmować więcej niż jedną bazę danych (InterBase ma wbudowany dwufazowy protokół potwierdzeń). Dzięki temu, mimo realnych ograniczeń wielkości bazy, można w IB6 obsługiwać nawet duże zestawy danych. Optymalizator kwerend w IB6 ma interesującą opcję - można go niemal całkowicie "wyłączyć", podając razem z kwerendą dokładny sposób jej przetwarzania - jakie indeksy mają być wykorzystywane, które tabele przeglądane wiersz za wierszem itp. Daje to programiście możliwość pre-cyzyjnego strojenia zapytań. Niestety, dokładne określenie wydajnego planu jest pracochłonne.

W IB6 zastosowano rzadko spotykany mechanizm definiowania automatycznie zmieniających się wartości pól. Programista może zdefiniować "generator" unikalnych wartości, np. określić jego wartość początkową, kontrolować przyrost itp. Następnie do pola w tabeli może przypisać utworzony generator. Pozwala to na dokładne zdefiniowanie sposobu automatycznego numerowania pól w bazie. Dzięki temu, że generator może obsługiwać więcej niż jedno pole, można tworzyć grupy podobnie numerowanych pól!

Zestaw znaków w IB6 nie jest przypisany serwerowi, a poszczególnym kolumnom znakowym w tabelach. Każdy zestaw ma określony sposób porządkowania, ale można dodatkowo wymusić inny "język" sortowania w instrukcji SELECT. Niestety, w IB6 kolumna znakowa może mieć rozmiar do 32 KB. Jeżeli wybierzemy zestaw znaków Unicode (2 bajty na znak), to nie da się przechować łańcucha dłuższego niż ok. 16 KB. Jednak warto dodać, że do przechowywania bardzo długich informacji w IB6 przeznaczony jest typ BLOB, gdzie kolumna automatycznie dostosowuje swój rozmiar do potrzeb.

Programowanie

Inżynierowie Borlanda skonstruowali specjalny komponent InterBase Express (IBX), umożliwiający szybką obsługę IB6 z poziomu aplikacji w Delphi czy C++ Builder. Programiści korzystający z Unixa mogą używać bardzo wygodnego Embedded SQL, pozwalającego osadzać kod SQL w kodzie C/C++ czy ze specjalnego zbioru funkcji API, obsługującego mechanizmy IB6 (analogiczne rozwiązania są dostępne dla Windows).

Mimo że IB6 nie zawiera dużej liczby wbudowanych funkcji, to pozwala na dość łatwe tworzenie własnych UDF i wkom-pilowanie ich w program. Nie są to jednak funkcje definiowane przez użytkowni- ka przy użyciu SQL, a specjalne proce- dury w C stanowiące po kompilacji część motoru bazy.

W bardzo wygodny sposób rozwiązano obsługę błędów i informowania aplikacji klienckiej o zdarzeniach, jakie zachodzą po stronie serwera. Z wnętrza procedury przechowywanej można zgłosić wyjątek, który może być przechwycony przez nadrzędną procedurę wbudowaną, potraktowany jako błąd albo przesłany do aplikacji klienckiej. W ten sposób bezproblemowo można np. informować o postępie w przetwarzaniu danych z wnętrza procedury na serwerze. Jest to mechanizm analogiczny do wyjątków w C++, z tym że wyjątki InterBase 6 mogą być także asynchroniczne.

W celu komercyjnej reprodukcji treści Computerworld należy zakupić licencję. Skontaktuj się z naszym partnerem, YGS Group, pod adresem [email protected]

TOP 200