LAMP-a świeci i straszy

Rosnąca popularność platformy aplikacyjnej LAMP skłania producentów serwerów baz danych do oferowania darmowych wersji swoich produktów.

Rosnąca popularność platformy aplikacyjnej LAMP skłania producentów serwerów baz danych do oferowania darmowych wersji swoich produktów.

Jeszcze kilka lat temu darmowe lub bardzo tanie były serwery baz danych w wersjach przeznaczonych dla programistów - do testowania i pisania aplikacji. Obecnie IBM, Microsoft, Oracle i Sybase oferują darmowe wersje, które mogą być używane także w systemach produkcyjnych. To nie przypadek ani zbieg okoliczności - raczej strach przed rosnącą popularnością platformy technologicznej LAMP (Linux, Apache, MySQL i PHP). Z platformy dla aplikacji WWW przekształciła się ona w wielu przypadkach w platformę dla aplikacji korporacyjnych.

Poza kluczowymi systemami transakcyjnymi większość systemów działających w firmach to aplikacje o niezbyt wyszukanej konstrukcji, służące do prostego przechowywania i udostępniania danych. Zresztą, bardziej skomplikowaną logikę zawsze można wynieść na oddzielny serwer aplikacyjny Java czy .Net obsługujący centralnie wiele różnych aplikacji. Nic zatem dziwnego, że producentom serwerów baz danych i narzędzi zrobiło się gorąco i pilnie poszukują sposobów, by klienci nie mieli powodów bliżej zapoznawać się z możliwościami LAMP-y.

Sybase ASE 15 Express

Sybase kilka lat temu zdecydował, że będzie oferować za darmo pełną wersję Adaptive Server Enterprise 11.0.3.3 (a potem 12.5.2) dla systemów Linux i FreeBSD (na platformie Intel x86 i Alpha) - zarówno do użytku deweloperskiego, jak i produkcyjnego. Wersji dla Windows nie było. Niestety, tak nabyta baza ASE 11.0.3.3 nie miała żadnego wsparcia technicznego - nawet za dodatkową opłatą. Nie było też dla niej narzędzia do zarządzania serwerem Sybase Central.

W przypadku najnowszego ASE 15 Sybase nie oferuje już pełnej wersji serwera, lecz - podobnie jak Oracle i Microsoft - ograniczoną funkcjonalnie i wydajnościowo wersję Express. Pozwala uruchomić na serwerze jedną instancję motoru i może użyć do 2 GB pamięci RAM i do 5 GB sumarycznego miejsca na dysku na przechowywanie danych. Nie ma ograniczenia co do liczby połączeń, brak jednak mechanizmów w rodzaju ASE_XML, które można wykupić dla innych edycji; także specjalnej, przeznaczonej dla Small Business. Oczywiście, dla wersji Express można wykupić usługę wsparcia technicznego.

O samym ASE 15 już pisaliśmy w CW 31/2005. Wypada tu jednak przypomnieć, że jest to ważna aktualizacja tego serwera, zawierająca wiele istotnych nowości. Jest tu m.in. mechanizm kolumn wyliczeniowych, pozwalający na zapamiętanie wyniku wyliczenia w dedykowanej kolumnie, która zostania automatycznie zaktualizowana, gdy zmienią się dane wejściowe. Możliwe jest także ustanawianie indeksów wyliczanych na podstawie zdefiniowanych funkcji, co ułatwia tworzenie tabel źródłowych dla aplikacji raportowych i analitycznych.

Dużo nowych elementów pojawiło się w algorytmie optymalizatora kwerend. Sybase twierdzi, że nowy algorytm, nazwany przez niego Next Generation Query Engine, potrafi dobrać sposób optymalizacji do ciągu operacji SQL - bez względu na to, czy jest to aplikacja DSS czy zwykła OLTP. Pierwszy etap optymalizacji to zgrupowanie pewnych kryteriów pozwalających sparametryzować działanie motoru - czyli wybranie czynników, które mają mieć ostatecznie wpływ na plan wykonania danej kwerendy. Drugi etap przypomina normalną optymalizację OLTP - ale już z pewnymi wskazówkami wynikającymi z pierwszego etapu.

Po wykonaniu zapytania optymalizator stara się jak najszybciej zwrócić pierwsze rekordy wyniku, co usprawnia działanie tradycyjnych aplikacji używających kursorów po stronie serwera.

JDataStore/Apache Derby

Gdy IBM przejmował Cloudscape, Borland rozpoczął oferowanie bazy danych opartej na Javie - JDataStore. W 2004 r. kod źródłowy bazy został przekazany do Apache Foundation i powstał projekt Derby, cieszący się obecnie dużą popularnością. Warto dodać, że podobny los spotkał także bazę InterBase (rozwijana przez Borlanda) - po otwarciu kodu zyskała ona "drugie życie" jako FireBird.

Derby to motor bazodanowy napisany w 100% w Javie. Motor wymaga J2SE 1.3, a przenośny między platformami jest zarówno sam motor, jak i plik z bazą danych. Aby użyć bazy, wystarczy do projektu dodać plik JAR i wywołać odpowiednią metodę, by uruchomić (lub zatrzymać) motor.

Z punktu widzenia kodu Javy jest to zwykły plik JAR - ok. 2 MB + opcjonalne komponenty serwera sieciowego (150 KB) i podobnego rozmiaru narzędzia. Derby może współpracować nawet w środowiskach ograniczonych sprzętowo do 16 MB RAM, w których na całe środowisko Java przeznaczyć można np. 4 MB.

Imponująca jest liczba standardów, które obsługuje ta baza - SQL92, SQL99, SQL2003 (chyba jako jedyna), a także SQL/XML. Motor zawiera tabele, relacje, indeksy, widoki, procedury składowane, funkcje, klucze obce itp. Dysponuje prostym optymalizatorem bazującym na koszcie. Nie ma oczywiście problemu z rozbudową funkcjonalności za pomocą kodu Java, który dzięki architekturze Derby działa dosyć sprawnie. Serwer może równolegle obsługiwać wiele baz danych, a także funkcjonować w kilku instancjach (procesach) jednocześnie.

Do komunikacji stosowany jest normalny sterownik JDBC, ale wszystkie odwołania są wewnątrzprocesowe, a więc bez komunikacji sieciowej itp. Można też używać specjalnego API DataSource do obsługi bazy danych. Niestety, Derby jest (przynajmniej na razie) zoptymalizowany dla najwyżej 2-procesorowych serwerów, a jego autorzy podkreślają, że liczba połączeń nie powinna przekraczać 30 oraz że aktualizacje powinny być rozłożone w czasie.

Oracle 10g Express (beta)

Do grupy producentów oferujących za darmo bazę danych do użytku produkcyjnego dołączył niedawno Oracle. Oracle 10g Express (na razie w wersji beta) ma podobne ograniczenia co SQL Server - 1 procesor, 1 GB RAM, 4 GB na całkowity rozmiar danych użytkownika. Dostępna jest dla Linuxa i Windows. Na jednym serwerze prawdopodobnie będzie można instalować tylko jedną kopię Oracle XE. Nie wiadomo też, jakimi kanałami będą rozpowszechniane aktualizacje. Na razie Oracle nie oferuje licencji dla środowisk produkcyjnych - trzeba czekać na wersję ostateczną.

Z Oracle XE można komunikować się za pośrednictwem Oracle Call Interface dla C/C++, ODBC/OLE DB, JDBC oraz providera .Net (są dostępne dwie wersje - opracowana przez Oracle i druga - napisana przez Microsoft). Warto dodać, że Oracle oferuje dodatek do Visual Studio .Net 2003 (Oracle Developer Tools for Visual Studio. Net), który pozwala na łatwiejsze pisanie rozwiązań bazodanowych wykorzystujących tę platformę. Z poziomu IDE można przeglądać i tworzyć schematy Oracle, definiować obiekty bazodanowe, testować procedury, czy wręcz wysyłać dowolne polecenia/skrypty SQL do serwera. Wspomniany dodatek pozwala na pisanie procedur przechowywanych w .Net - ale, podobnie jak w przypadku procedur w Javie, taki proces musi działać poza motorem bazodanowym i nie jest tak szybki, jak kod PL/SQL. Do administracji Oracle XE używane są specjalne strony administracyjne na portalu WWW .

Dla programistów Oracle udostępnia mechanizmy do PHP i specjalne narzędzie Oracle HTML DB (od wersji 10g) oraz pozwala na szybkie tworzenie aplikacji WWW w oparciu o bazę danych. Jest to serwer, który zarządza sesją, procedurą uwierzytelniania, pozwala definiować zasady przepływu pomiędzy stronami HTML. Sesja przechowywana jest w bazie danych - nie jest używany mechanizm serwera WWW. Programista może definiować zasady walidacji danych wprowadzanych na formatkach. Sam program jest tak naprawdę definicją metadanych, które określają, jak aplikacja zostanie przedstawiona użytkownikowi. Cały mechanizm jest napisany w PL/SQL i może być udostępniany przy wykorzystaniu Oracle HTTP Server (Apache) i mod_plsql.

Oracle mówi o HTML DB jako o narzędziu do "deklaratywnego" programowania, gdzie w przypadku prostych aplikacji nie ma konieczności pisania skomplikowanego kodu. Przeznaczone jest ono raczej dla "nietechnicznego" użytkownika, który nie zna JSP czy PHP, a potrzebuje po prostu "zrobić formatkę". Do rozbudowy funkcjonalności wystarczy znajomość PL/SQL. Z drugiej strony, SQL jest językiem do pracy z danymi, a nie do tworzenia rozbudowanych aplikacji.

LAMP-a zaczyna parzyć

Oracle stara się udowodnić, że jego baza bardzo dobrze współpracuje z PHP - w domyśle - zamiast MySQL. Wiele przykładów prezentuje sposób migracji z MySQL do Oracle, czy też podkreśla, że tak naprawdę użycie zaawansowanej bazy danych nie będzie bardziej skomplikowane. Pytanie tylko, czy takie podejście przekona programistów open source, którzy na produkty komercyjne patrzą nieprzychylnie.

Niedawno Oracle przejął firmę Innobase, która rozwijała oparty na MySQL motor InnoDB - najpopularniejsze rozwiązanie zapewniające transakcyjność dla MySQL, umożliwiające przechowywanie danych w wielu różnych formatach. Co prawda sam motor był udostępniony na licencji, ale np. już InnoDB Hot Backup - narzędzie do wykonywania kopii bez zatrzymywania serwera - nie było dostępne wraz z kodem.

Standardowe (i szybkie) motory MySQL nie obsługują transakcji i dodatkowo programiści PHP przyzwyczaili się, by sobie radzić bez nich (dodatkowym powodem był fakt, że InnoDB przez długi czas była wyraźnie wolniejsza niż inne mechanizmy przechowywania). Jeżeli program korzysta z danych głównie do odczytu (np. generując menu, artykuły itp.). to transakcje nie są niezbędne. Znacznie ważniejszy jest np. szybki mechanizm wyboru "porcji" danych z dużego zestawu rekordów, a to akurat w MySQL rozwiązane jest bardzo zgrabnie.

Braki w implementacji podzapytań, czy bardziej skomplikowanych złączeń SQL w starszych wersjach SQL nie przeszkadzają twórcom aplikacji - większość rozwiązań używa prostych warunków typu porównanie wartości kluczy itp. W takim przypadku nawet faktyczny brak optymalizatora kwerend nie bardzo przeszkadza. Pozostałą logikę zapewnia serwer PHP działający "blisko" bazy.

Mały, a całkiem spory

Warto dokładnie policzyć rozmiary danych w przypadku polskich małych i średnich firm. Tak naprawdę 4 GB dla bazy przeznaczonej dla systemu biznesowego (handel, magazyn, prosty CRM) w wielu przypadkach wystarczy. Może się okazać, że ograniczenia wersji Express są praktycznie nieistotne. Dodatkowo wszystkie wersje Express bez trudu mogą być aktualizowane do swoich "pełnych" odpowiedników - są to te same motory danych i migracja polega albo na skopiowaniu pliku, albo przeniesieniu kopii zapasowej bazy.

Dlaczego MySQL?

MySQL wciąż jest znacznie bardziej popularna w zastosowaniach WWW niż wszystkie inne bazy - w dużej mierze ze względu na prostotę i wynikającą z niej wydajność. Poza tym aplikacje wykorzystujące platformę LAMP nie wykorzystują intensywnie samej bazy danych, a to dlatego, że sporo operacji wykonuje serwer PHP. A ponieważ PHP działa jako moduł w Apache i zwykle serwer bazodanowy znajduje się fizycznie na tej samej maszynie, można traktować PHP jak język programowania baz danych.

PHP dobry i zły

Co by nie mówić o platformie LAMP, nie można nie zauważyć, że język skryptowy PHP jest już lekko przestarzały. W PHP programista zwykle klei "ciąg" znaczników HTML wysyłany do przeglądarki klienta. W podobny sposób, niestety, generuje zapytania SQL. Jednym z powszechniej wykorzystywanych mechanizmów jest możliwość "podstawiania" we wzorcu określonych wartości w miejscach wskazywanych przez jakiś symbol oraz rozbudowane API do obsługi łańcuchów znaków. W takim układzie nawet stosowanie doskonalszej niż MySQL bazy danych nie zmieni faktu, że typowy program nie będzie stosował bardziej zaawansowanych mechanizmów bazy danych. Programiści przyzwyczaili się do tego, by "kleić" tekst, ponieważ jest to łatwe i daje dużą elastyczność. Ta elastyczność ma jednak swoją cenę - w niemal każdym projekcie opartym na języku PHP wykrywany jest błąd typu SQL Injection - w wielu odmianach.

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

TOP 200