Obecnie zagadnienie optymalizacji jest jednym z najtrudniejszych wyzwań stawianych przed programistą. Spowodowane jest to coraz większą i wciąż przyrastającą ilością danych. Problemem nie jest tylko samo ich dostarczenie, ale wyszczególnienie z nich istotnych informacji, które poddajemy analizie. Jeszcze bardziej skomplikowane jest dostarczanie danych w tzw. „locie”, co oznacza analizę w trakcie przetwarzania lub pobierania z nich informacji. Wszystko po to, aby otrzymać to co istotne dla użytkownika np. analizy finansowe, wykresy zasobów lub bieżące zdarzenia produkcyjne. Czas dostarczenia danych wydłuża się na tyle, że niejednokrotnie aplikacja nie nadaje się do użytku, a ich utrzymywanie na własnych zasobach staje się nieopłacalne. Konieczna jest analiza oraz wykorzystanie narzędzi, które ułatwią ten proces na tyle, aby dane znów były użyteczne.
Załóżmy, że mamy system, który zbiera informacje na temat cen oraz produktów z wielu rozproszonych systemów poprzez API. Powoduje to spore opóźnienia na stronie internetowej, która ma za zadanie te dane dostarczyć i zaprezentować użytkownikowi. Wydłużony czas dostępu do danych powoduje rezygnację użytkownika z korzystania z systemu. Konieczne więc staje się wprowadzenie odpowiednich mechanizmów optymalizujących i zapobiegawczych.
Jednym z mechanizmów może być zastosowanie zapisu danych po stronie serwera dostępu do danych (serwera, który zwraca dane bezpośrednio do użytkownika) oraz cykliczne odpytywanie się systemów zewnętrznych (np. poprzez wspomniane API) o konieczne dane i bieżące ich aktualizowanie. Rozwiązanie to umożliwia natychmiastowy dostęp do danych, co bezpośrednio wpływa na komfort pracy w systemie. Oczywiście cały proces powinien być poprzedzony analizą architektury, odpowiednimi przeliczeniami oraz sprawdzeniem dostępnych zasobów.
Analizy oraz przeliczenia są istotnym krokiem do tego, aby zastosować odpowiednie zasoby takie jak technologia, pamięć serwera czy rodzaj mechanizmów komunikacji. Kluczowa podczas optymalizacji jest również sama baza danych, a przede wszystkim odpowiedni jej dobór do przetwarzanych/przechowywanych danych. Często spotykałem się z nieodpowiednio dobraną bazą danych co sprawiało późniejsze trudności. Aby nie dochodziło do takich sytuacji ważne jest zrozumienie różnicy pomiędzy bazą SQL oraz NOSQL.
Baza SQL jest to baza relacyjna, gdzie dane oraz tabele mają pewną relację. Przykładowo – baza danych firmy prowadząca sprzedaż poprzez swoich przedstawicieli. Załóżmy, że mamy trzy tabele: Firma, Przedstawiciel, Produkt. Przedstawiciel jest pracownikiem firmy, czyli mamy relację jeden do jeden, gdzie mamy powiązanie po kluczach i budujemy odpowiednią relację. Następnie ów przedstawiciel posiadać wiele produktów, które oferuje. Oznacza to relację jeden do wielu.
Baza NOSQL jest natomiast bazą dokumentową. Tu też posłużę się przykładem. Załóżmy, że mamy firmę, gdzie występuje system reklamacji. Każda reklamacja jest unikalna, otrzymuje ona swój numer oraz datę wpływu. Może również zawierać informację o osobie, która ją wprowadziła, ale jest to często zmienne, ponieważ w firmie jest spora rotacja pracowników. Rejestrujemy reklamację i nie istotne jest dla nas żadne inne powiązanie. Jest to dokument, który przechowujemy. Oczywiście baza NOSQL daje możliwość powiązania między dokumentami np. po numerze, ale jest to również specyficzny sposób na jej wykorzystanie np. dokumenty PZ oraz WZ, które wiążemy ze sobą numerem zamówienia.
Sebastian Wąsik