Wszystko w pamięci

Przechowywanie całej bazy danych w pamięci ma sporo zalet; ma też poważne wady.

Przechowywanie całej bazy danych w pamięci ma sporo zalet; ma też poważne wady.

Większość informacji zapisywanych we współczesnych składnicach danych jest obsługiwana przez relacyjne bazy danych producentów, takich jak Oracle, IBM, Informix, Microsoft czy Sybase, lub bazy hierarchiczne na mainframe'ach, np. IMS, CA-IDMS czy CA-Datacom. Wszystkie przechowują dane na dyskach i aby je pobrać, muszą polegać na fizycznych, powolnych mechanizmach dostępu do talerza dyskowego.

W ciągu wielu lat istnienia tych produktów ich twórcy optymalizowali sposoby dostępu do dysku, aby zmniejszyć czas pobierania danych, chociaż stale dążyli również do stworzenia możliwości obsługi bazy danych w pamięci. Tak powstały rozwiązania zwane Very Large Memory (VLM), pozwalające na przechowywanie w pamięci bazy o objętości wielu gigabajtów, ograniczonej fizycznym rozmiarem pamięci 64-bitowego systemu komputerowego. Jednakże rozwiązanie to było nadal półśrodkiem, rozszerzeniem rozmiarów bufora pamięciowego w standardowej bazie dyskowej.

Dopiero rosnące wymagania szybkiego dostępu do danych przy obsłudze nieznanej wcześniej liczby klientów Internetu spowodowało powstanie odmiennych rozwiązań baz danych całkowicie rezydujących w pamięci, w nieznacznym stopniu polegających na dyskach.

Zalety bazy pamięciowej

Praktycznie natychmiastowy dostęp do wszystkich danych, o ok. 3 rzędów wielkości szybszy niż w przypadku pobierania danych z dysku. Aby pobrać dane z dysku trzeba czekać na ruch mechanizmu przesuwania głowic (zwykle wymaga to kilkunastu ms) oraz na ustawienie się dysku do właściwej pozycji (średnio 2-8 ms). W efekcie współczesne mechanizmy dyskowe wykonują od ok. 30-100 operacji we/wy na sekundę, baza pamięciowa zaś pobiera dane bez oczekiwania.

Dostęp realizowany jest tylko do wybranego rekordu, bez potrzeby pobierania bloku danych (na ogół 2 KB), jak w przypadku baz dyskowych, organizowanych zgodnie z blokową strukturą zapisu informacji na dyskach. Bazy rezydujące w pamięci nie mają organizacji blokowej.

Nie ma różnicy między dostępem sekwencyjnym (do kolejnych rekordów) a przypadkowym. W bazach dyskowych zawsze czyta się "na zapas" kilka kolejnych bloków dyskowych, gdyż głowica już znajduje się we właściwej pozycji nad dyskiem, aplikację zaś optymalizuje się pod kątem wykorzystania pobranych rekordów.

Wady baz pamięciowych

Bazy pamięciowe są wrażliwe na błędy oprogramowania. Typowe dla programów C/C++ przekroczenie zakresu wskaźnika niszczące aplikację w tym przypadku może zniszczyć zawartość bazy. W razie awarii systemu operacyjnego lub aplikacji i konieczności restartu komputera cała baza w pamięci ulega zniszczeniu. W bazach dyskowych bufory kontrolera dyskowego zapewniają ochronę przed zniszczeniem jeszcze nie zapisanych na dysk rekordów, dokonując tej operacji samoczynnie, nawet już po awarii procesora i zniszczeniu zawartości pamięci głównej.

Nieodporność na awarie sprzętowe. Gdy dysk zawierający bazę ulegnie fizycznej awarii, zawsze istnieje szansa odzyskania jego zawartości (całkowicie lub częściowo). Mechanizmy redundancyjne RAID pozwalają odzyskać tę zawartość z dokładnością do jednego bloku dyskowego (512 bitów). Awaria sprzętowa komputera niszczy całkowicie bazę rezydującą w pamięci.

Różnice technologiczne

Producenci baz dyskowych optymalizują je pod kątem minimalizacji liczby operacji dyskowych, twórcy baz pamięciowych natomiast optymalizują liczbę cykli pracy procesora, niezbędnych do pobrania i zapisania danych w bazie, oraz ilość miejsca (rozmiar pamięci), potrzebnego do przechowania bazy. Stąd wynikają różnice algorytmiczne w konstrukcji tych baz.

Organizacja danych w bazach pamięciowych jest inna niż w bazach dyskowych. Nie ma potrzeby tak intensywnego stosowania kluczy głównych i pomocniczych, ponieważ każdy rekord można wskazać za pomocą wskaźnika; zastępują je zaawansowane mechanizmy zarządzania wskaźnikami. Podobne mechanizmy stosowano już w popularnych w latach 70. hierarchicznych bazach danych.

Zarządzanie danymi za pomocą wskaźników tworzy jednak problemy przy projektowaniu aplikacji, gdyż zmusza projektanta do trwałego włączania tychże wskaźników w aplikację, co powoduje utratę elastyczności aplikacji. W trakcie przebiegu transakcji dane nie mogą być przemieszczane, gdyż ich adres jest używany do kolejnych dostępów podczas transakcji.

W bazach dyskowych dane grupuje się w klastry "podobnych" danych (np. dane o kliencie i operacjach, które wykonuje), do których sięga się w jednej transakcji. Zapisując je w fizycznym sąsiedztwie na dysku, można je pobrać w jednej operacji dyskowej. Nie ma potrzeby stosowania tej techniki w bazach pamięciowych, chociaż trzeba pamiętać, że kiedyś trzeba będzie zapisać bazę na dysk lub inny nośnik i móc z niego odtwarzać zawartość pamięci. W efekcie organizacja danych w pamięci musi w pewien sposób być skorelowana z organizacją blokową danych na dyskach.

Backup i odzyskiwanie bazy

Dla użytkowników potrzebujących bardzo szybkich baz danych idealnym rozwiązaniem oferującym najlepsze możliwości byłyby bazy rezydujące w pamięci, gdyby można było usunąć ich wady.

Dla twórców aplikacji największy problem pojawia się w momencie, gdy aplikacja kończy transakcję (commit). W bazach dyskowych oznacza to zapisanie informacji o stanie transakcji do pliku dziennika, a w zadanych momentach (checkpoint) również do pliku dyskowego bazy. Bazy pamięciowe, aby były wiarygodne, muszą również zapisywać informacje o końcu transakcji do pliku dziennika na dysku. W aplikacjach intensywnie transakcyjnych ta operacja stanie się czynnikiem najbardziej ograniczającym wydajność bazy. Podobny wpływ ma operacja składowania bazy, którą trzeba wykonywać systematycznie, aby uniknąć katastrofalnych konsekwencji awarii sprzętowych lub systemowych.

Zastosowania

Bazy pamięciowe znacznie lepiej nadają się do obsługi aplikacji głównie pobierających dane z bazy niż transakcyjnych. Można je z powodzeniem wykorzystać np. w aplikacjach obsługi telefonii komórkowej: każde połączenie wymaga co najmniej kilku dostępów do bazy danych abonentów sieci, a tysiące połączeń w każdej sekundzie dyskwalifikują bazy dyskowe do tego celu. Inne zastosowania to aplikacje dostawców Internetu, oferujących usługi na bieżąco - notowania giełdowe, usługi finansowe czy dostęp do aktualnych wiadomości.