Motor w drodze

Wersja beta SQL Server 2000 powinna w najbliższych dniach trafić do programistów.

Wersja beta SQL Server 2000 powinna w najbliższych dniach trafić do programistów.

Istotne zmiany wprowadzono w języku TSQL, czyli wersji SQL zaimplementowanej przez Microsoft. Najważniejsze rozszerzenia dotyczą definiowania własnych funkcji, działania triggerów i tzw. kaskadowego DRI (Database Reference Integrity).

Funkcje definiowane przez użytkownika (UDF) mogą zwracać zarówno wartości skalarne, jak i zbiór rekordów. Można z nich skorzystać w dowolnych wyrażeniach SQL, zarówno w liście wyrażeń po poleceniu SELECT, w określeniu warunku (WHERE), jak i określać wartości domyślne czy definiować więzy nakładane na tabele. W dużym stopniu upraszcza to tworzenie złożonych procedur wbudowanych. Warto dodać, że UDF są "związane" ze schematem bazy danych i uniemożliwiają zmianę np. nazwy tabeli, z której korzystają.

Kaskadowe DRI określa, jak baza będzie działać w momencie wykonania instrukcji naruszającej spójność zdefiniowaną relacjami. Przykładowo, pozwala określić, że w momencie usunięcia rekordu nadrzędnego będą usuwane wszystkie rekordy podrzędne (połączone kluczem obcym). Przypomina to mechanizm wbudowany w MS Access czy Visual Fox Pro.

Problemem w SQL 7.0 było to, że wyzwalacz zdefiniowany w tabeli był wykonywany po aktualizacji danych. W efekcie, jeżeli aktualizacja naruszała DRI, była odrzucana przed wykonaniem triggera. Rozwiązaniem problemu może być zdefiniowanie wyzwalaczy działających przed aktualizacją. Takie rozwiązanie przyjęto w wielu motorach baz danych. Do SQL 2000 wprowadzono inny mechanizm. Można zdefiniować wyzwalacz zastępujący instrukcje aktualizujące czy usuwające dane. W ten sposób można dokładnie określić, jakie operacje mają być wykonywane np. przy zmianie klucza głównego. Co więcej, SQL 2000 pozwala definiować wyzwalacze typu INSTEAD OF także na widokach bazy. Dzięki temu jest możliwe, by widok pozwalał na modyfikację tylko jednej z wielu tabel występujących w instrukcji SELECT.

SQL 2000 wprowadza dwa nowe typy danych. Pojawia się typ danych odpowiadający typowi VARIANT z technologii COM, który może przechowywać dowolny typ danych TSQL (z wyjątkiem BLOB) oraz 8-bajtowa liczba całkowita.

Wyniki tymczasowe

W poprzednich wersjach problem przechowywania tymczasowych wyników kwerend w procedurach składowanych był rozwiązany nie najlepiej. Można było tworzyć tymczasowe tablice, widoczne dla danej sesji, czy globalne - dla wszystkich użytkowników. W SQL 2000 wprowadzono nowy typ zmiennej - zmienna tablicowa, którą definiuje się w podobny sposób, jak tabelę, ale automatycznie "znika" po wyjściu z danej procedury przechowywanej. Taka zmienna może być "zwracana" przez UDF, czyli funkcje definiowane przez użytkownika.

Podzielone widoki

Znacznie rozszerzono możliwości tzw. podzielonych widoków, na które składa się wiele wyrażeń SELECT, połączonych operatorem UNION. SQL 7.0 pozwalał przeglądać takie widoki, nowa wersja ponadto umożliwia, by dane za pośrednictwem takiego widoku były zmieniane. Tabele definiujące taki widok mogą pochodzić nie tylko z różnych baz danych (jak w SQL 7.0), ale także z różnych serwerów. Wtedy, na podstawie zdefiniowanych warunków, żądanie aktualizacji będzie kierowane tylko do właściwego serwera. Zwiększa to w dużym stopniu skalowalność i ułatwia przetwarzanie w olbrzymich kostkach OLAP.

SQL 2000 pozwala na zapisywanie pewnych ustawień w specjalnym obszarze właściwym dla danej sesji (połączenia z bazą danych). Upraszcza to np. tworzenie warstwy środkowej aplikacji, gdzie kilka połączeń do serwera SQL jest współdzielonych przez wielu użytkowników.

Przeszukiwanie pełnotekstowe

Wiele zmian wprowadzono w usłudze Full Text Search. SQL 2000 może przechowywać listę zmian poindeksowanych danych, co powoduje, że nie jest konieczne częste odbudowywanie indeksu. Dodatkowe narzędzia pozwalają konfigurować, kiedy będzie dokonywana odbudowa indeksu. Można określić filtry do indeksowanych dokumentów. Przygotowano filtry do stron HTML i dokumentów MS Office. Można także stosować filtry innych producentów lub samodzielnie zaimplementować kilkanaście metod i stworzyć własny filtr. Każda z kolumn poddana indeksowaniu typu Full Text może mieć przypisany własny język. Niestety, prawdopodobnie nie będzie pełnego wsparcia dla języka polskiego.

Motor Full Text w pełni wykorzystuje klaster NT. W SQL 7.0 nie było to możliwe.

Zestaw znaków

SQL 7.0 wymagał, by podczas instalacji administrator określił wspólny dla wszystkich zestaw znaków i porządek sortowania. SQL 2000 pozwala, by każda baza, a nawet każda tabela miała zarówno własny zestaw znaków, jak i własny porządek. Co więcej, wybierając dane z tabeli możemy zażądać, by były sortowane wg innej kolejności niż ustawiona dla pozostałej części kolumny.

Indeksy jak kwerendy

W SQL 7.0 tworzenie indeksu wymagało przejrzenia danych źródłowych, co sprowadzało się do przeczytania każdego rekordu w tabeli. W SQL 2000 potraktowano operację tworzenia indeksu, tak jak dowolną kwerendę. Jeżeli na danej tabeli są już zdefiniowane indeksy, które mogą być wykorzystane, to nowy indeks zostanie utworzony na podstawie istniejących. W znacznym stopniu przyspiesza to tworzenie indeksów na olbrzymich tabelach.

Indeksy w SQL 2000 mogą definiować kolejność zwracanych wierszy. Przykładowo, można określić indeks rosnący, co spowoduje, że następnie optymalizowane będą kwerendy w określonym porządku.

W SQL 2000 można do tabeli dodać pola wyliczane, których wartość jest wyznaczana na podstawie innych kolumn. Na takich polach można tworzyć indeksy. Ponadto nowa wersja SQL dysponuje "utrwalonymi widokami", na których także można definiować indeksy. Tworzenie takich indeksów nie zawsze jest dobrym rozwiązaniem. Wymagają one dużej ilości zasobów serwera, ponieważ tak jak wszystkie widoki, muszą odzwierciedlać aktualny stan danych w tabelach. Tego typu widoki zwiększają wydajność systemów analitycznych typu OLAP, ale spowalniają działanie aplikacji, które wykonują sporą liczbę zapisów (typu OLTP).

Data mining i OLAP

Z SQL 7.0 zintegrowano usługi OLAP, pozwalające tworzyć kostki wielowymiarowe do późniejszej analizy. W SQL 2000, oprócz rozszerzenia możliwości OLAP, wprowadzono narzędzia typu data mining. W SQL Server 2000 są zawarte 2 algorytmy. Pierwszy, Microsoft Decision Trees (DTS), tworzy specjalne drzewo (klasyfikujące dane źródłowe), pozwalające przewidywać wartość kolumny na podstawie specjalnego zbioru treningowego. Drugi, Microsoft Clustering, pozwala wyznaczać podobne grupy rekordów. Jest przeznaczony do wyszukiwania podobieństw w analizowanych danych. Umożliwia np. automatyczne zanalizowanie danych o sprzedaży i określenie wspólnych cech klientów, dokonujących danego typu zakupów. Co najważniejsze, do SQL 2000 można dołączać dodatkowe algorytmy data mining innych firm.

Narzędzia OLAP w SQL 2000 nie mają większości ograniczeń, które występowały w wersji 7.0. Możliwe jest tworzenie znacznie większej liczby wymiarów. Duża część zmian w usługach OLAP ma na celu umożliwienie podziału obliczeń na możliwie największą liczbę serwerów przy zachowaniu centralnego zarządzania analizą.

Znacznie ułatwiono zbieranie danych do dalszej obróbki. Usługi DTS zostały znacznie rozszerzone, a co najważniejsze - gruntownie przebudowano dokumentację DTS 8.0 (zawiera ona np. większą liczbę przykładów, szablony do tworzenia dostawców OLE DB zgodnych z DTS itp.). Z poziomu DTS w SQL 2000 można z łatwością wykonywać dowolne operacje na danych (nie tylko transformacje, takie jak w SQL 7.0) czy dokładnie śledzić proces przesyłania danych. Interesującą funkcją jest możliwość zapisania pakietu DTS jako kodu w Visual Basicu. W razie błędu z poziomu DTS może być wywołany zainstalowany debugger JIT.

Obsługa XML

W SQL 2000 obsługa XML została głęboko zaszyta. Nie sprawia więc problemów np. wykorzystanie XML jako danych źródłowych w operacji INSERT (dodawaniu rekordów) do tabeli.

Dokumenty XML są traktowane tak jak dane tekstowe. Nie ma także problemów w tworzeniu schematu XML na podstawie definicji bazy czy eksportowaniu w tym formacie. Wszystkimi operacjami zajmuje się motor bazy. Ponadto zdefiniowano specjalny interfejs do tworzenia kwerend w XML (przeznaczony do wykorzystania w aplikacjach internetowych), a także interfejs do aktualizacji danych. Podobnie jak w SQL 7.0 dowolne polecenie SQL mogło pobierać dane przekazywane przez dowolnego dostawcę OLE DB, w SQL 2000 można dodatkowo otwierać zestawy rekordów zapisane w XML.

Replikacja

Mechanizmy replikacji w SQL 2000 przypominają rozwiązania stosowane w SQL 7.0. Poprawiono interfejsy dla programisty. Dość łatwo można tworzyć rozwiązania, gdzie np. baza danych jest rozsyłana do subskrybentów na CD-ROM czy pocztą elektroniczną, a potem jako całość subskrybowana do późniejszej aktualizacji.

Usunięto 3 dosyć duże niedogodności SQL 7.0. Podczas tworzenia pierwszego obrazu danych nie jest nakładana blokada na zapis do bazy. Motor bazy tworzy obraz na podstawie danych i ewentualnie listy późniejszych transakcji, które wycofuje. Subskrybent replikacji nie jest przypisany do określonego serwera źródłowego (w SQL 7.0, jeżeli np. serwer publikujący nie działał, subskrybenci nie mogli dokonać replikacji). W SQL 2000 można tak skonfigurować replikację, by określić np. grupę serwerów publikujących, a klient może skorzystać z dowolnego z nich.

Wprowadzono mechanizmy pozwalające replikować zmiany w strukturze bazy. Dotychczas każda zmiana wymagała utworzenia definicji replikacji od początku. Każdy subskrybent może mieć trochę inną strukturę danych, a ich przekształcanie można wykonywać przy użyciu DTS. W przypadku replikacji typu Merge wprowadzono kilkanaście nowych, predefiniowanych sposobów rozwiązywania konfliktów. Niektóre pozwalają na automatyczne wyświetlanie specjalnych okien dialogowych (utworzonych przez programistę) w razie zaistnienia konfliktu. Także kreatory replikacji typu Merge mogą np. automatycznie przydzielić zakres dozwolonych wartości IDENTITY do poszczególnych serwerów, biorących udział w replikacji.

Podobnie jak w SQL 7.0, również i w tej wersji możliwa jest replikacja z niemal dowolnym źródłem danych połączonym za pośrednictwem providera OLE DB. W SQL 2000 wprowadzono specjalne mechanizmy przeznaczone dla niektórych motorów danych (DB2 i Oracle, tylko replikacja typu snapshot).

W SQL 2000 rozszerzono możliwości replikacji transakcyjnej. Nie jest już konieczne stałe połączenie między serwerami uczestniczącymi w wymianie danych, można skorzystać z pośrednictwa kolejki MSMQ.

SQL 2000 przenośny

Microsoft planuje opracować wersję SQL 2000 Windows CE Edtion na wszystkie platformy, na których działa Windows CE. Produkt prawdopodobnie będzie gotowy pod koniec roku. Zamiarem jest zachowanie maksymalnej zgodności z pełnym motorem SQL ze strony interfejsów dla programistów. Ograniczenia będą wynikały z mniejszych zasobów komputerów naręcznych (np. ograniczenie do 32 indeksów).

Dostępny będzie interfejs ADOCE 3.1 i OLEDBCE. Zostanie dopracowana zgodność w mechanizmach replikacji typu Merge.

MSDE 2000

Podobnie jak dla wersji SQL 7.0, także dla SQL 2000 będzie dostępna okrojona wersja motoru, zastępująca JET (motor bazy MS Access). Ograniczony zostanie do 2 GB rozmiar bazy danych i do 5 - liczba wątków wykonujących kwerendy.

MSDE 2000 nie będzie już działał na Windows 95. Do tego celu będzie potrzebny co najmniej Windows 98. Programiści otrzymają 2 wersje pakietów Windows Installer, jedna ma zawierać podstawowe elementy SQL 2000 (instalacja zajmie ok. 38 MB), druga ze wsparciem dla replikacji, MS Agent, DMO i DTS - ok. 48 MB.

Wydajność, bezpieczeństwo

W SQL 2000 zwiększono skalowalność. Serwer może działać np. na klastrach NT 2000, korzystać z technologii shared nothing itp. W motor bazy danych wbudowano wiele algorytmów, które automatycznie dostosowują serwer do obciążenia.

SQL 2000 ma wbudowany mechanizm dystrybucji logu na zapasowe serwery (w SQL 7.0 trzeba było tworzyć odpowiednie skrypty itp.) Można uruchomić jednocześnie kilka instancji SQL 2000 na jednym serwerze (może też równolegle działać SQL 7.0, MSDE czy MSDE 2000). Co ciekawsze, istnieje możliwość dołączenia do SQL 2000 pliku bazy danych utworzonego w SQL 7.0.

Administracja SQL została bardziej uproszczona. Serwer w pełni korzysta z Active Directory i mechanizmów autoryzacji Windows 2000. Microsoft zabiega też o certyfikat bezpieczeństwa C2.

Czy będzie łatwiej?

Wiele rozszerzeń wprowadzanych do SQL 2000 wymaga, by określone funkcje czy wyrażenia były deterministyczne, tzn. by za każdym razem dla tych samych danych wejściowych zwracały ten sam wynik. Dotyczy to zarówno funkcji UDF, jak i wyliczanych kolumn i innych elementów. Operacje deterministyczne mogą korzystać tylko z innych operacji deterministycznych. Niestety, w dużym stopniu ograniczy to swobodę programisty i wymusi określoną budowę aplikacji/procedur przechowywanych. Dopiero gdy Microsoft udostępni wersję beta SQL 2000 większej liczbie programistów, będzie wiadomo, na ile nowe funkcje ułatwią tworzenie aplikacji.

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

TOP 200