Szkolenie "Bazy danych w budowaniu wysokowydajnych systemów rozproszonych" to intensywny kurs łączący teorię systemów rozproszonych z praktycznym wykorzystaniem baz danych w projektowaniu skalowalnych, odpornych na błędy aplikacji. Podczas trzech dni uczestnicy zdobędą wiedzę na temat: ✅ Kluczowych wyzwań systemów rozproszonych: spójności, dostępności, skalowalności ✅ Wzorów projektowych: CQRS, Saga, Two-Phase Commit (2PC), Circuit Breaker ✅ Nowoczesnych baz danych: dokumentowych (MongoDB, CouchDB), klucz-wartość (Redis), grafowych (Neo4j), kolumnowych (HBase), obiektowych (GridGain), time-series (TimescaleDB, InfluxDB) ✅ Technik partycjonowania, sharding'u i replikacji dla zwiększenia wydajności systemów ✅ Zarządzania danymi w czasie rzeczywistym vs klasycznego batch processingu ✅ Praktycznych metod implementacji transakcji rozproszonych i odzyskiwania danych po awarii Szkolenie obejmuje liczne warsztaty praktyczne, w których uczestnicy będą modelować, optymalizować i wdrażać systemy bazodanowe w środowisku rozproszonym. Kurs jest przeznaczony dla programistów, architektów systemów oraz administratorów, którzy chcą zdobyć umiejętności w zakresie wydajnego zarządzania danymi w systemach rozproszonych.
Dzień 1: Teoria i wprowadzenie do systemów rozproszonych
- Wstęp
- Wprowadzenie do struktury szkolenia i agendy, omówienie środowiska szkoleniowego.
- Podstawowe pojęcia systemów rozproszonych
- Definicja systemów rozproszonych i ich znaczenie we współczesnych aplikacjach.
- Kluczowe wyzwania: skalowalność, dostępność, spójność, odporność na błędy.
- Modele spójności danych
- Omówienie Strong Consistency i Eventual Consistency.
- Zarządzanie spójnością w systemach rozproszonych: quorum, Read-Write Quorums, Read Your Own Writes.
- Systemy rozproszonych logów i komunikacja
- Wzorzec pub/sub i dualizm strumień-tablica.
- Kompaktowanie danych i procesowanie danych w czasie rzeczywistym.
- Case Study 1: Przykład wysoko wydajnych aplikacji
- Analiza architektury systemu komunikacyjnego (np. WhatsApp, Signal).
- Wyzwania związane ze spójnością i odzyskiwaniem danych.
Dzień 2: Praktyczne aspekty projektowania systemów rozproszonych
- Projektowanie aplikacji odpornych na błędy
- Omówienie wzorców CQRS, Inbox/Outbox, Two-Phase Commit (2PC), Saga, Change Data Capture (CDC), Circuit Breaker, Read Repair.
- Przykłady zastosowania w praktyce.
- Przykłady nierelacyjnych baz danych
- Bazy dokumentowe (np. MongoDB, CouchDB):
- Bazy klucz-wartość (np. Redis):
- Bazy grafowe (np. Neo4j, OrientDB):
- Bazy kolumnowe (np. HBase):
- Bazy obiektowe (np. GridGain):
- Bazy time-series (np. TimescaleDB, InfluxDB):
- Search Engine (np. Apache Solr):
- In-Memory Grid (np. Hazelcast, GridGain):
- Nowoczesne bazy danych: Partycjonowanie, sharding i replikacja
- Partycjonowanie i sharding: Omówienie technik dzielenia danych na mniejsze fragmenty w celu poprawy wydajności i skalowalności systemów.
- Replikacja danych: Różne typy replikacji (synchroniczna, asynchroniczna), korzyści i wyzwania związane z replikowaniem danych w rozproszonych środowiskach.
- Indeksy wtórne (Secondary Indexes): Tworzenie i optymalizacja zapytań z wykorzystaniem indeksów wtórnych dla poprawy wydajności.
- Case Study 2: Projektowanie systemu opartego na grafach
- Projektowanie i modelowanie grafowe w systemach rozproszonych z użyciem Neo4j lub OrientDB.
- Ćwiczenie praktyczne: modelowanie grafowe.
- Zarządzanie danymi w czasie rzeczywistym vs klasyczne hurtownie danych
- Wprowadzenie do przetwarzania danych w czasie rzeczywistym oraz batch processing.
- Przykład wykorzystania Timescale w monitorowaniu danych czasowych.
- NewSQL – nowoczesne podejście do relacyjnych baz danych
- Omówienie koncepcji NewSQL jako połączenia zalet relacyjnych baz danych z elastycznością i skalowalnością rozwiązań NoSQL.
- Zadanie dla NewSQL: Uczestnicy zapoznają się z najpopularniejszymi bazami NewSQL, a w zadaniu praktycznym będą pracować z CockroachDB. Celem zadania będzie implementacja transakcji z zachowaniem gwarancji ACID w środowisku rozproszonym.
Dzień 3: Praktyczne ćwiczenia i optymalizacja baz danych
- Zadania praktyczne na przykładzie nierelacyjnych baz danych:
- Zadanie dla MongoDB: Tworzenie złożonych zapytań z agregacją danych.
- Uczestnicy będą pracować nad tworzeniem zapytań z wykorzystaniem pipeline MongoDB, grupowaniem i filtrowaniem danych w czasie rzeczywistym.
- Zadanie dla Redis: Implementacja mechanizmu cache'owania przy użyciu Redis.
- Uczestnicy zbudują system przechowywania wyników zapytań w Redis, aby zoptymalizować wydajność odczytów.
- Zadanie dla CouchDB: Synchronizacja danych w CouchDB przy użyciu funkcji replikacji.
- Zadanie obejmuje konfigurację replikacji pomiędzy dwoma instancjami CouchDB i analizę konfliktów danych.
- Zadanie dla Neo4j: Optymalizacja zapytań z Cypher w bazie grafowej.
- Uczestnicy przeanalizują duży graf i zbudują optymalizacje zapytań wyszukujących zależności między węzłami.
- Zadanie dla InfluxDB: Przetwarzanie danych czasowych i optymalizacja retencji danych.
- Ćwiczenia z użyciem InfluxQL do analizy przepływu danych oraz ustalania strategii retencji.
- Zadanie dla GridGain: Przetwarzanie danych z wykorzystaniem GridGain, budowanie i optymalizacja zapytań w środowisku obiektowym.
- Uczestnicy będą optymalizować przechowywanie i odczyt dużych obiektów.
- Zadanie dla Apache Solr: Implementacja pełnotekstowego wyszukiwania z użyciem Solr.
- Tworzenie indeksów i optymalizacja zapytań wyszukiwawczych na dużych zestawach danych.
- Zadanie dla MongoDB: Tworzenie złożonych zapytań z agregacją danych.
- Zadanie: Transakcje rozproszone
- Uczestnicy zapoznają się z koncepcją transakcji rozproszonych, w tym mechanizmami zapewniającymi spójność w systemach rozproszonych.
- Praktyczne ćwiczenie: Implementacja transakcji rozproszonych z wykorzystaniem wzorców takich jak Two-Phase Commit (2PC) lub Saga.
- Odzyskiwanie danych po awarii i kopie zapasowe
- Wzorce Last-Writer-Wins, Vector Clocks, CRDT.
- Strategie odzyskiwania danych po awarii.
- Podsumowanie i dyskusja
- Sesja Q&A i wymiana doświadczeń.
Szkolenie nie omawia baz relacyjnych, Elasticsearch, Apache Kafka, Prometheus, Cassandra.
Polska - Bazy danych w budowaniu wysokowydajnych systemów rozproszonych