🎯 Definicja
Techniki przetwarzania danych obejmują różne sposoby przechowywania, pobierania i przetwarzania danych w bazach danych, rozróżniając m.in. przechowywanie wierszowe, kolumnowe oraz wykorzystanie nowoczesnych silników wektorowych. Celem tych metod jest optymalizacja wydajności dla odpowiednich typów obciążeń: transakcyjnych, analitycznych czy przetwarzania na dużą skalę.
🔑 Kluczowe punkty
- Przechowywanie kolumnowe optymalizuje analitykę i duże skany danych.
- Przechowywanie wierszowe zapewnia wysoką wydajność operacji transakcyjnych (OLTP).
- Silnik wektorowy wykorzystuje paralele przetwarzanie blokowe i instrukcje SIMD, drastycznie zwiększając wydajność zapytań analitycznych.
- Wybór metody zależy od charakteru danych oraz typowych operacji.
📚 Szczegółowe wyjaśnienie
Przechowywanie kolumnowe
- Dane przechowywane są w osobnych blokach dla każdej kolumny tabeli.
- Umożliwia szybkie agregacje, selektywne pobieranie wybranych kolumn i skuteczną kompresję.
- Idealne do hurtowni danych, BI, raportowania – zapytania odczytujące wybrane kolumny z milionów wierszy.
- Przykłady: Apache Druid, ClickHouse, BigQuery, Snowflake.
Zalety:
- Szybkie skanowanie kolumn i duża oszczędność miejsca przy dużej powtarzalności wartości.
- Wysoka wydajność w obciążeniach analitycznych (OLAP).
Ograniczenia:
- Wolniejsze wstawianie/aktualizacja pojedynczych rekordów.
- Mniej wydajne w aplikacjach operujących na całych wierszach.
Przechowywanie wierszowe
- Dane przechowywane są w postaci kolejnych wierszy (rekordów).
- Każdy wiersz reprezentuje pełną encję obiektu, np. pojedynczy zamówienie lub użytkownik.
- Stosowane w relacyjnych bazach transakcyjnych: PostgreSQL, MySQL, SQL Server.
Zalety:
- Szybkie pobieranie, aktualizacja i usuwanie pojedynczych rekordów.
- Dobre wsparcie dla typowego OLTP: operacje CRUD, transakcje, wykrywanie kolizji.
Ograniczenia:
- Mało wydajne dla analiz na wielu kolumnach z dużych zestawów danych.
- Brak możliwości sprytnego kompresowania w obrębie pojedynczej kolumny.
Technika | Przykłady zastosowania | Typowe bazy danych |
---|---|---|
Kolumnowe | Analityka, BI, hurtownie | Druid, BigQuery, ClickHouse |
Wierszowe | OLTP, systemy operacyjne | MySQL, Postgres, Oracle |
Silnik wektorowy
- Nowoczesny sposób przetwarzania zapytań, gdzie operacje (np. suma kolumny) są wykonywane na „wektorach” (dużych blokach danych) zamiast pojedynczych wierszy.
- Wykorzystuje instrukcje SIMD procesora – jedno polecenie operuje na wielu wartościach naraz.
- Minimalizuje narzut obsługi zapytań względem przetwarzania wiersz po wierszu.
- Podnosi wydajność cache’owania, umożliwia masowe przetwarzanie oraz znacznie przyspiesza analizy i agregacje.
Przykłady silników:
- DuckDB – analizy OLAP na laptopie, Python, R.
- Photon Engine (Databricks) – analiza danych w chmurze.
- Apache Arrow, Polars (engine typu dataframe).
Zalety:
- Drastyczny wzrost wydajności w przetwarzaniu masowym.
- Efektywna współpraca z silnikami kolumnowymi i narzędziami data science.
💡 Przykład zastosowania
Analizy danych clickstream w platformie e-commerce: dane z milionów odsłon są ładowane do bazy z przechowywaniem kolumnowym (np. Druid), a agregacje oraz transformacje do raportów wykonywane są przez silnik wektorowy DuckDB, co zapewnia szybkie generowanie raportów nawet przy bardzo dużych wolumenach danych.
📌 Źródła
- DuckDB — Oficjalna dokumentacja
- Photon Engine (Databricks)
- Column-based vs Row-based Data Stores — Vertica Blog
- SIMD and Vectorization Explained — DuckDB Blog
👽 Brudnopis
- Kolumnowe – skanowanie, kompresja, agregacje, OLAP.
- Wierszowe – CRUD, OLTP, wydajne aktualizacje pojedynczych rekordów.
- Wektorowe – przetwarzanie masowe, SIMD, cache locality, DuckDB, Databricks Photon.
- Wybór zależy od przypadku i obciążenia (transakcje vs analityka vs ML).
- Bazy: DuckDB = wektorowy + kolumnowy, Druid = kolumnowy/OLAP, Postgres/MySQL = wierszowy.