Przeprowadzka do ClickHouse: 3 lata później

Trzy lata temu na scenie Wiktor Tarnawski i Aleksiej Milovidov z Yandex Wysokie obciążenie++ powiedział, jak dobry jest ClickHouse i jak nie zwalnia. I na kolejnym etapie był Alexander Zaitsev с raport o przeprowadzce do Kliknij Dom z innego analitycznego systemu DBMS i z wnioskiem, że Kliknij Domoczywiście dobre, ale niezbyt wygodne. Kiedy w 2016 roku firma LifeStreet, w którym wówczas pracował Alexander, konwertował wielopetabajtowy system analityczny do formatu Kliknij Dom, była to fascynująca „żółta ceglana droga” pełna nieznanych niebezpieczeństw - Kliknij Dom wtedy wyglądało to jak pole minowe.

Trzy lata później Kliknij Dom stało się znacznie lepsze - w tym czasie Aleksander założył firmę Altinity, która nie tylko pomaga ludziom się przeprowadzić Kliknij Dom dziesiątki projektów, ale także udoskonala sam produkt wspólnie z kolegami z Yandex. Teraz Kliknij Dom wciąż nie jest to beztroski spacer, ale już nie pole minowe.

Alexander pracuje z systemami rozproszonymi od 2003 roku, realizując duże projekty nt MySQL, Oracle и Vertica. Na ostatnim Wysokie obciążenie++ 2019 Aleksandra, jednego z pionierów stosowania Kliknij Dom, powiedziałem, czym jest teraz ten DBMS. Dowiemy się o głównych funkcjach Kliknij Dom: czym różni się od innych systemów i w jakich przypadkach skuteczniej jest z niego korzystać. Na przykładach przyjrzymy się najnowszym i sprawdzonym w projektach praktykom budowania systemów w oparciu o Kliknij Dom.


Retrospektywa: co wydarzyło się 3 lata temu

Trzy lata temu przenieśliśmy firmę LifeStreet na Kliknij Dom z innej bazy analitycznej, a migracja analityki sieci reklamowej wyglądała następująco:

  • Czerwiec 2016. W Otwarte źródło pojawiła Kliknij Dom i nasz projekt się rozpoczął;
  • Sierpień. Dowód koncepcji: duża sieć reklamowa, infrastruktura i 200-300 terabajtów danych;
  • Październik. Pierwsze dane produkcyjne;
  • Grudzień. Pełne obciążenie produktu wynosi 10–50 miliardów zdarzeń dziennie.
  • Czerwiec 2017. Pomyślna migracja użytkowników do Kliknij Dom, 2,5 petabajta danych w klastrze 60 serwerów.

W trakcie procesu migracji świadomość tego wzrastała Kliknij Dom to dobry system, z którym przyjemnie się pracuje, ale jest to wewnętrzny projekt Yandex. Dlatego istnieją niuanse: Yandex najpierw zajmie się własnymi klientami wewnętrznymi, a dopiero potem społecznością i potrzebami użytkowników zewnętrznych, a ClickHouse nie osiągnął wówczas poziomu przedsiębiorstwa w wielu obszarach funkcjonalnych. Dlatego w marcu 2017 założyliśmy Altinity, aby tworzyć Kliknij Dom jeszcze szybciej i wygodniej nie tylko dla Yandex, ale także dla innych użytkowników. A teraz my:

  • Szkolimy i pomagamy budować rozwiązania w oparciu o Kliknij Dom aby klienci nie wpadli w kłopoty i aby rozwiązanie ostatecznie zadziałało;
  • Zapewniamy wsparcie 24/7 Kliknij Dom- instalacje;
  • Rozwijamy własne projekty ekosystemowe;
  • Aktywnie angażujemy się w siebie Kliknij Dom, odpowiadając na prośby użytkowników, którzy chcą zobaczyć określone funkcje.

I oczywiście pomagamy w przeprowadzce Kliknij Dom с MySQL, Vertica, wyrocznia, Zielona śliwka, Przesunięcie ku czerwieni i inne systemy. Braliśmy udział w różnych akcjach i wszystkie zakończyły się sukcesem.

Przeprowadzka do ClickHouse: 3 lata później

Po co się przeprowadzać Kliknij Dom

Nie zwalnia tempa! To jest główny powód. Kliknij Dom - bardzo szybka baza danych dla różnych scenariuszy:

Przeprowadzka do ClickHouse: 3 lata później

Losowe cytaty osób, które pracują z ludźmi przez długi czas Kliknij Dom.

Skalowalność. W innej bazie danych można osiągnąć dobrą wydajność na jednym sprzęcie, ale Kliknij Dom możesz skalować nie tylko w pionie, ale także w poziomie, po prostu dodając serwery. Nie wszystko działa tak sprawnie jak byśmy chcieli, ale działa. System możesz rozbudowywać w miarę rozwoju Twojej firmy. Ważne jest, abyśmy nie byli ograniczeni rozwiązaniem już teraz i zawsze istniał potencjał rozwoju.

Ruchliwość. Nie ma przywiązania do jednej rzeczy. Na przykład z Amazonka Przesunięcie ku czerwieni Ciężko jest się gdzieś przenieść. A Kliknij Dom możesz zainstalować go na swoim laptopie, serwerze, wdrożyć w chmurze, przejdź do Kubernetes — nie ma żadnych ograniczeń w funkcjonowaniu infrastruktury. Jest to wygodne dla każdego i jest to duża zaleta, jaką nie może pochwalić się wiele innych podobnych baz danych.

Гибкость. Kliknij Dom nie poprzestaje na jednym, np. Yandex.Metrica, ale rozwija się i jest wykorzystywany w coraz większej liczbie różnych projektów i branż. Można go rozbudowywać dodając nowe możliwości rozwiązywania nowych problemów. Na przykład uważa się, że przechowywanie logów w bazie danych jest złe, więc wymyślili Elasticsearch. Ale dzięki elastyczności Kliknij Dom, możesz w nim także przechowywać logi, a często jest to nawet lepsze niż w Elasticsearch - w Kliknij Dom wymaga to 10 razy mniej żelaza.

Wolny open Source. Nie musisz za nic płacić. Nie ma potrzeby negocjowania pozwolenia na instalację systemu na Twoim laptopie lub serwerze. Żadnych ukrytych opłat. Jednocześnie żadna inna technologia baz danych Open Source nie może konkurować pod względem szybkości Kliknij Dom. MySQL, MariaDB, Greenplum - wszystkie są znacznie wolniejsze.

Społeczność, napęd i zabawa. Miej Kliknij Dom znakomita społeczność: spotkania, pogawędki i Aleksiej Milovidov, który zaraża nas wszystkich swoją energią i optymizmem.

Przeprowadzka do ClickHouse

Iść do Kliknij Dom z jakiegoś powodu potrzebujesz tylko trzech rzeczy:

  • Zrozum ograniczenia Kliknij Dom i do czego się nie nadaje.
  • Zdobyć przewagę technologii i jej największych atutów.
  • Eksperyment. Nawet rozumiejąc, jak to działa Kliknij Domnie zawsze da się przewidzieć, kiedy będzie szybciej, kiedy wolniej, kiedy lepiej, a kiedy gorzej. Więc spróbuj.

Problem z poruszaniem się

Jest tylko jedno „ale”: jeśli się przeprowadzisz Kliknij Dom od czegoś innego, wtedy zwykle coś idzie nie tak. Jesteśmy przyzwyczajeni do pewnych praktyk i rzeczy, które sprawdzają się w naszej ulubionej bazie danych. Na przykład każdy, z kim współpracujesz SQW bazach danych L obowiązkowy jest następujący zestaw funkcji:

  • transakcje;
  • ograniczenia;
  • konsystencja;
  • indeksy;
  • AKTUALIZUJ/USUŃ;
  • NULL;
  • milisekundy;
  • automatyczne rzutowanie czcionek;
  • wielokrotne połączenia;
  • dowolne partycje;
  • narzędzia do zarządzania klastrami.

Rekrutacja jest obowiązkowa, ale trzy lata temu w Kliknij Dom Żadna z tych funkcji nie była dostępna! Obecnie pozostaje mniej niż połowa tego, co nie zostało wdrożone: transakcje, ograniczenia, spójność, milisekundy i rzutowanie typów.

A najważniejsze, że w Kliknij Dom niektóre standardowe praktyki i podejścia nie działają lub działają inaczej niż jesteśmy przyzwyczajeni. Wszystko, co pojawia się w Kliknij Dom, koresponduje z "KliknijDomowy sposób", tj. funkcje różnią się od innych baz danych. Na przykład:

  • Indeksy nie są wybierane, ale pomijane.
  • AKTUALIZUJ/USUŃ nie synchroniczny, ale asynchroniczny.
  • Istnieje wiele złączeń, ale nie ma narzędzia do planowania zapytań. Sposób ich późniejszego wykonywania nie jest zazwyczaj jasny dla osób ze świata baz danych.

Skrypty ClickHouse

W 1960 r. amerykański matematyk węgierskiego pochodzenia EP Wignera napisał artykuł”Nieuzasadniona skuteczność matematyki w naukach przyrodniczych” („Niezrozumiała skuteczność matematyki w naukach przyrodniczych”), że otaczający nas świat z jakiegoś powodu dobrze opisują prawa matematyczne. Matematyka jest nauką abstrakcyjną, a prawa fizyczne wyrażone w formie matematycznej nie są trywialne, a EP Wignera podkreślił, że jest to bardzo dziwne.

Z mojego punktu widzenia, Kliknij Dom - ta sama dziwność. Parafrazując Wignera, możemy powiedzieć tak: niewyobrażalna skuteczność jest zdumiewająca Kliknij Dom w szerokiej gamie zastosowań analitycznych!

Przeprowadzka do ClickHouse: 3 lata później

Weźmy na przykład Hurtownia danych w czasie rzeczywistym, do którego dane są ładowane niemal w sposób ciągły. Chcemy otrzymywać od niego żądania z drugim opóźnieniem. Proszę - korzystaj Kliknij Dom, ponieważ jest to scenariusz, dla którego został zaprojektowany. Kliknij Dom właśnie tak jest wykorzystywane nie tylko w sieci, ale także w marketingu i analityce finansowej, AdTech, a także w Wykrywanie oszustwN. W Hurtownia danych w czasie rzeczywistym używany jest złożony schemat strukturalny, taki jak „gwiazda” lub „płatek śniegu”, z wieloma tabelami DOŁĄCZ (czasami wiele), a dane są zwykle przechowywane i zmieniane w niektórych systemach.

Weźmy inny scenariusz – Szereg czasowy: monitorowanie urządzeń, sieci, statystyki użytkowania, Internet Rzeczy. Mamy tu do czynienia z dość prostymi zdarzeniami uporządkowanymi w czasie. Kliknij Dom nie został pierwotnie opracowany do tego celu, ale okazał się dobrze działać, dlatego korzystają z niego duże firmy Kliknij Dom jako repozytorium informacji monitorujących. Aby sprawdzić, czy jest to odpowiednie Kliknij Dom w przypadku szeregów czasowych stworzyliśmy punkt odniesienia w oparciu o podejście i wyniki NapływDB и Baza danych skali czasu - wyspecjalizowane szereg czasowy bazy danych. Okazało sięŻe Kliknij Domnawet bez optymalizacji pod takie zadania wygrywa na zagranicznym boisku:

Przeprowadzka do ClickHouse: 3 lata później

В szereg czasowy Zwykle używana jest wąska tabela - kilka małych kolumn. Z monitorowania może pochodzić wiele danych — miliony rekordów na sekundę — i zwykle pojawiają się one w małych seriach (w czasie rzeczywistym streaming). Dlatego potrzebny jest inny skrypt wstawiania, a same zapytania mają swoją specyfikę.

Zarządzanie Zaloguj. Zbieranie logów do bazy danych jest zwykle złe, ale Kliknij Dom można to zrobić za pomocą komentarzy, jak opisano powyżej. Wiele firm korzysta Kliknij Dom właśnie w tym celu. W tym przypadku korzystamy z płaskiego szerokiego stołu, na którym przechowujemy całe kłody (np. w formie JSON) lub pokroić na kawałki. Dane ładujemy zazwyczaj w dużych partiach (plikach) i wyszukujemy według jakiegoś pola.

Do każdej z tych funkcji wykorzystuje się najczęściej specjalistyczne bazy danych. Kliknij Dom można to wszystko zrobić i to tak dobrze, że to je przewyższa. Przyjrzyjmy się teraz bliżej szereg czasowy scenariusz i jak prawidłowo „gotować”. Kliknij Dom dla tego scenariusza.

Szereg czasowy

Obecnie jest to główny scenariusz dla którego Kliknij Dom uważane za rozwiązanie standardowe. Szereg czasowy to zbiór zdarzeń uporządkowanych w czasie, reprezentujących zmiany w pewnym procesie w czasie. Może to być na przykład tętno na dzień lub liczba procesów w systemie. Wszystko, co sprawia, że ​​czas leci z pewnymi wymiarami, jest szereg czasowy:

Przeprowadzka do ClickHouse: 3 lata później

Większość tego typu zdarzeń pochodzi z monitoringu. Może to być nie tylko monitorowanie sieci, ale także rzeczywistych urządzeń: samochodów, systemów przemysłowych, Internet przedmiotów, fabryki czy bezzałogowe taksówki, do bagażnika których Yandex już wkłada Kliknij Dom-serwer.

Istnieją na przykład firmy, które zbierają dane ze statków. Co kilka sekund czujniki na kontenerowcu wysyłają setki różnych pomiarów. Inżynierowie je badają, budują modele i próbują zrozumieć, jak efektywnie wykorzystuje się statek, ponieważ kontenerowiec nie powinien stać bezczynnie nawet przez sekundę. Każdy przestój to strata pieniędzy, dlatego ważne jest, aby przewidzieć trasę tak, aby przestoje były minimalne.

Obecnie następuje rozwój wyspecjalizowanych baz danych mierzących szereg czasowy. online Silniki DB Różne bazy danych są w jakiś sposób uszeregowane i można je przeglądać według typu:

Przeprowadzka do ClickHouse: 3 lata później

Najszybciej rosnącym typem jest szereg czasowyS. Grafowe bazy danych również rosną, ale szereg czasowyw ciągu ostatnich kilku lat rosły szybciej. Typowymi przedstawicielami tej rodziny baz danych są NapływDB, Prometheus, KDB, Baza danych skali czasu (zbudowany na PostgreSQL), rozwiązania z Amazonka. Kliknij Dom może być również tutaj użyte i jest używane. Podam kilka publicznych przykładów.

Jednym z pionierów jest firma CloudFlare (CDN-dostawca). Monitorują swoje CDN przez Kliknij Dom (DNS-upraszanie, HTTP-queries) przy ogromnym obciążeniu - 6 milionów zdarzeń na sekundę. Wszystko przechodzi Kafka, idzie do Kliknij Dom, co daje możliwość podglądu dashboardów zdarzeń w systemie w czasie rzeczywistym.

Comcast - jeden z liderów telekomunikacji w USA: Internet, telewizja cyfrowa, telefonia. Stworzyli podobny system kontroli CDN w ramach open Source projekt Kontrola ruchu Apache do pracy z ogromnymi danymi. Kliknij Dom używany jako backend do analiz.

Perkona wbudowany Kliknij Dom wewnątrz twojego PMMdo przechowywania monitoringu różnych MySQL.

Specyficzne wymagania

Bazy danych szeregów czasowych mają swoje własne, specyficzne wymagania.

  • Szybkie wstawianie od wielu agentów. Musimy bardzo szybko wstawiać dane z wielu strumieni. Kliknij Dom Robi to dobrze, ponieważ wszystkie jego wstawki są nieblokujące. Każdy wstawić to nowy plik na dysku, a małe wstawki można buforować w taki czy inny sposób. W Kliknij Dom Lepiej jest wstawiać dane w dużych partiach niż pojedynczo.
  • Elastyczny schemat, szereg czasowy zwykle nie znamy całkowicie struktury danych. Można zbudować system monitorowania pod konkretną aplikację, ale wtedy trudno go wykorzystać do innego zastosowania. Wymaga to bardziej elastycznego schematu. Kliknij Dom, pozwala to zrobić, nawet jeśli jest to baza silnie typowana.
  • Efektywne przechowywanie i zapominanie danych. Zwykle w szereg czasowy ogromna ilość danych, dlatego należy je przechowywać tak efektywnie, jak to możliwe. Na przykład o godz NapływDB dobra kompresja to jego główna cecha. Ale oprócz przechowywania musisz także móc „zapomnieć” stare dane i zrobić coś próbkowanie w dół — automatyczne zliczanie agregatów.
  • Szybkie zapytania na zagregowanych danych. Czasami ciekawie jest spojrzeć na ostatnie 5 minut z dokładnością do milisekund, ale w przypadku danych miesięcznych dokładność minutowa lub sekundowa może nie być konieczna - wystarczą ogólne statystyki. Wsparcie tego rodzaju jest konieczne, w przeciwnym razie realizacja wniosku na 3 miesiące zajmie bardzo dużo czasu, nawet w Kliknij Dom.
  • Żądania typu „ostatni punkt, od». Są to typowe dla szereg czasowy zapytania: spójrz na ostatni pomiar lub stan systemu w danym momencie t. Nie są to zbyt przyjemne zapytania do bazy danych, ale trzeba też umieć je wykonać.
  • Szeregi czasowe „sklejania”.. Szereg czasowy to szereg czasowy. Jeśli istnieją dwa szeregi czasowe, często należy je połączyć i skorelować. Nie jest to wygodne w przypadku wszystkich baz danych, szczególnie w przypadku niewyrównanych szeregów czasowych: tutaj są pewne punkty czasowe, są inne. Można brać pod uwagę średnią, ale nagle nadal będzie tam dziura, więc nie jest jasne.

Zobaczmy, jak te wymagania są spełnione Kliknij Dom.

Schemat

В Kliknij Dom schemat dla szereg czasowy Można tego dokonać na różne sposoby, w zależności od stopnia regularności danych. Można zbudować system na zwykłych danych, gdy znamy wcześniej wszystkie metryki. Na przykład zrobiłem to CloudFlare z monitoringiem CDN to dobrze zoptymalizowany system. Można zbudować bardziej ogólny system monitorujący całą infrastrukturę i poszczególne usługi. W przypadku danych nieregularnych nie wiemy z góry, co monitorujemy – a to chyba najczęstszy przypadek.

Regularne dane. Kolumny. Schemat jest prosty - kolumny z wymaganymi typami:

CREATE TABLE cpu (
  created_date Date DEFAULT today(),  
  created_at DateTime DEFAULT now(),  
  time String,  
  tags_id UInt32,  /* join to dim_tag */
  usage_user Float64,  
  usage_system Float64,  
  usage_idle Float64,  
  usage_nice Float64,  
  usage_iowait Float64,  
  usage_irq Float64,  
  usage_softirq Float64,  
  usage_steal Float64,  
  usage_guest Float64,  
  usage_guest_nice Float64
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

Jest to zwykła tabela monitorująca pewnego rodzaju aktywność ładowania systemu (użytkownik, system, bezczynny, miło). Proste i wygodne, ale mało elastyczne. Jeśli chcemy bardziej elastycznego schematu, możemy użyć tablic.

Nieregularne dane. Tablice:

CREATE TABLE cpu_alc (
  created_date Date,  
  created_at DateTime,  
  time String,  
  tags_id UInt32,  
  metrics Nested(
    name LowCardinality(String),  
    value Float64
  )
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

SELECT max(metrics.value[indexOf(metrics.name,'usage_user')]) FROM ...

Struktura Zagnieżdżone to dwie tablice: nazwa.metryki и metryka.wartość. Tutaj możesz przechowywać dowolne dane monitorowania w postaci tablicy nazw i tablicy pomiarów dla każdego zdarzenia. W celu dalszej optymalizacji zamiast jednej takiej struktury można wykonać kilka. Na przykład jeden dla unosić się-wartość, kolejna - dla int-to znaczy ponieważ int Chcę efektywniej przechowywać.

Ale taka struktura jest trudniej dostępna. Będziesz musiał użyć specjalnej konstrukcji, używając specjalnych funkcji, aby wyciągnąć wartości najpierw indeksu, a następnie tablicy:

SELECT max(metrics.value[indexOf(metrics.name,'usage_user')]) FROM ...

Ale nadal działa dość szybko. Innym sposobem przechowywania nieregularnych danych jest wiersz.

Nieregularne dane. Smyczki. W tej tradycyjnej metodzie, bez tablic, nazwy i wartości przechowywane są jednocześnie. Jeżeli z jednego urządzenia na raz przyjdzie 5 pomiarów, w bazie danych zostanie wygenerowanych 000 wierszy:

CREATE TABLE cpu_rlc (
  created_date Date,  
  created_at DateTime,  
  time String,  
  tags_id UInt32,  
  metric_name LowCardinality(String),  
  metric_value Float64
) ENGINE = MergeTree(created_date, (metric_name, tags_id, created_at), 8192);


SELECT 
    maxIf(metric_value, metric_name = 'usage_user'),
    ... 
FROM cpu_r
WHERE metric_name IN ('usage_user', ...)

Kliknij Dom radzi sobie z tym - ma specjalne rozszerzenia Kliknij Dom SQL. Na przykład maxIf — specjalna funkcja, która oblicza maksimum według metryki, gdy spełniony jest jakiś warunek. Możesz napisać kilka takich wyrażeń w jednym żądaniu i od razu obliczyć wartość dla kilku metryk.

Porównajmy trzy podejścia:

Przeprowadzka do ClickHouse: 3 lata później

Szczegóły

Tutaj dodałem „Rozmiar danych dysku” dla jakiegoś zestawu danych testowych. W przypadku kolumn mamy najmniejszy rozmiar danych: maksymalną kompresję, maksymalną prędkość zapytania, ale płacimy za to, że musimy wszystko nagrać na raz.

W przypadku tablic jest trochę gorzej. Dane są nadal dobrze skompresowane i można zapisać nieregularny wzór. Ale Kliknij Dom - baza danych kolumnowa, a gdy zaczniemy przechowywać wszystko w tablicy, zamienia się ona w jednowierszową, a za elastyczność płacimy wydajnością. W przypadku dowolnej operacji będziesz musiał wczytać całą tablicę do pamięci, a następnie znaleźć w niej żądany element - a jeśli tablica się powiększy, prędkość spadnie.

W jednej z firm stosujących to podejście (np. Uber), tablice są cięte na kawałki po 128 elementów. Dane z kilku tysięcy metryk o wolumenie 200 TB danych/dzień są przechowywane nie w jednej macierzy, ale w 10 lub 30 tablicach ze specjalną logiką przechowywania.

Najprostszym podejściem jest użycie ciągów. Jednak dane są słabo skompresowane, rozmiar tabeli jest duży i nawet jeśli zapytania opierają się na kilku metrykach, ClickHouse nie działa optymalnie.

Schemat hybrydowy

Załóżmy, że wybraliśmy obwód tablicowy. Jeśli jednak wiemy, że większość naszych dashboardów pokazuje tylko metryki użytkowników i systemu, możemy dodatkowo zmaterializować te metryki w kolumny z tablicy na poziomie tabeli w następujący sposób:

CREATE TABLE cpu_alc (
  created_date Date,  
  created_at DateTime,  
  time String,  
  tags_id UInt32,  
  metrics Nested(
    name LowCardinality(String),  
    value Float64
  ),
  usage_user Float64 
             MATERIALIZED metrics.value[indexOf(metrics.name,'usage_user')],
  usage_system Float64 
             MATERIALIZED metrics.value[indexOf(metrics.name,'usage_system')]
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

Podczas wkładania Kliknij Dom automatycznie je policzy. W ten sposób możesz połączyć przyjemne z pożytecznym: schemat jest elastyczny i ogólny, ale wyciągnęliśmy najczęściej używane kolumny. Należy pamiętać, że nie wymagało to zmiany wkładki i ETLktóry kontynuuje wstawianie tablic do tabeli. Właśnie to zrobiliśmy ALTER TABLE, dodałem kilka głośników i otrzymaliśmy hybrydowy i szybszy schemat, z którego możesz zacząć korzystać od razu.

Kodeki i kompresja

dla szereg czasowy Ważne jest, jak dobrze spakujesz dane, ponieważ ilość informacji może być bardzo duża. W Kliknij Dom Istnieje zestaw narzędzi umożliwiających osiągnięcie efektu kompresji 1:10, 1:20, a czasem więcej. Oznacza to, że 1 TB rozpakowanych danych na dysku zajmuje 50-100 GB. Mniejszy rozmiar jest dobry, dane można szybciej czytać i przetwarzać.

Aby osiągnąć wysoki poziom kompresji, Kliknij Dom obsługuje następujące kodeki:

Przeprowadzka do ClickHouse: 3 lata później

Przykładowa tabela:

CREATE TABLE benchmark.cpu_codecs_lz4 (
    created_date Date DEFAULT today(), 
    created_at DateTime DEFAULT now() Codec(DoubleDelta, LZ4), 
    tags_id UInt32, 
    usage_user Float64 Codec(Gorilla, LZ4), 
    usage_system Float64 Codec(Gorilla, LZ4), 
    usage_idle Float64 Codec(Gorilla, LZ4), 
    usage_nice Float64 Codec(Gorilla, LZ4), 
    usage_iowait Float64 Codec(Gorilla, LZ4), 
    usage_irq Float64 Codec(Gorilla, LZ4), 
    usage_softirq Float64 Codec(Gorilla, LZ4), 
    usage_steal Float64 Codec(Gorilla, LZ4), 
    usage_guest Float64 Codec(Gorilla, LZ4), 
    usage_guest_nice Float64 Codec(Gorilla, LZ4), 
    additional_tags String DEFAULT ''
)
ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

Tutaj definiujemy kodek Podwójna delta w jednym przypadku, w drugim - Goryli na pewno dodamy więcej LZ4 kompresja. W rezultacie rozmiar danych na dysku jest znacznie zmniejszony:

Przeprowadzka do ClickHouse: 3 lata później

To pokazuje, ile miejsca zajmują te same dane, ale przy użyciu różnych kodeków i kompresji:

  • w pliku GZIP na dysku;
  • w ClickHouse bez kodeków, ale z kompresją ZSTD;
  • w ClickHouse z kodekami i kompresją LZ4 i ZSTD.

Można zauważyć, że tabele z kodekami zajmują znacznie mniej miejsca.

Rozmiar ma znaczenie

Nie mniej ważne выбрать poprawny typ danych:

Przeprowadzka do ClickHouse: 3 lata później

We wszystkich powyższych przykładach użyłem Pływak64. Ale jeśli wybierzemy Pływak32, wtedy byłoby jeszcze lepiej. Dobrze to pokazali chłopaki z Perkony w artykule, do którego link znajduje się powyżej. Ważne jest, aby używać najbardziej kompaktowego typu, odpowiedniego do zadania: nawet mniejszego ze względu na rozmiar dysku niż ze względu na szybkość zapytań. Kliknij Dom bardzo wrażliwy na to.

Jeśli możesz skorzystać intxnumx zamiast intxnumx, to spodziewaj się prawie dwukrotnego wzrostu wydajności. Dane zajmują mniej pamięci, a cała „arytmetyka” działa znacznie szybciej. Kliknij Dom wewnętrznie jest to system bardzo ściśle typowany, maksymalnie wykorzystujący wszystkie możliwości, jakie dają nowoczesne systemy.

Agregacja i Zmaterializowane widoki

Widoki agregacyjne i zmaterializowane umożliwiają tworzenie agregatów na różne okazje:

Przeprowadzka do ClickHouse: 3 lata później

Na przykład możesz mieć niezagregowane dane źródłowe i możesz dołączać do nich różne zmaterializowane widoki z automatycznym sumowaniem za pomocą specjalnego silnika SumowanieMergeTree (SMT). SMT to specjalna struktura danych agregujących, która automatycznie oblicza agregacje. Surowe dane są wstawiane do bazy, są automatycznie agregowane i można na nich od razu korzystać z dashboardów.

TTL - „zapomnij” o starych danych

Jak „zapomnieć” dane, które nie są już potrzebne? Kliknij Dom wie jak to zrobić. Tworząc tabele, możesz określić TTL wyrażenia: na przykład, że przechowujemy dane minutowe przez jeden dzień, dane dzienne przez 30 dni i nigdy nie dotykamy danych tygodniowych ani miesięcznych:

CREATE TABLE aggr_by_minute
…
TTL time + interval 1 day

CREATE TABLE aggr_by_day
…
TTL time + interval 30 day

CREATE TABLE aggr_by_week
…
/* no TTL */

Wielopoziomowy - dzielić dane na dyski

Idąc dalej tym pomysłem, dane można przechowywać w Kliknij Dom w różnych miejscach. Załóżmy, że chcemy przechowywać aktualne dane z ostatniego tygodnia na bardzo szybkim serwerze lokalnym SSD, a więcej danych historycznych umieściliśmy w innym miejscu. W Kliknij Dom to jest teraz możliwe:

Przeprowadzka do ClickHouse: 3 lata później

Możesz skonfigurować zasady przechowywania (polityka przechowywania) Więc Kliknij Dom automatycznie przeniesie dane po osiągnięciu określonych warunków do innego magazynu.

Ale to nie wszystko. Na poziomie konkretnej tabeli możesz zdefiniować reguły, kiedy dokładnie dane trafiają do chłodni. Na przykład dane są przechowywane na bardzo szybkim dysku przez 7 dni, a wszystko, co jest starsze, jest przenoszone na wolny. Jest to dobre, ponieważ pozwala utrzymać maksymalną wydajność systemu, jednocześnie kontrolując koszty i nie marnując pieniędzy na zimne dane:

CREATE TABLE 
... 
TTL date + INTERVAL 7 DAY TO VOLUME 'cold_volume', 
    date + INTERVAL 180 DAY DELETE

Wyjątkowe możliwości Kliknij Dom

Prawie we wszystkim Kliknij Dom Są takie „wyróżnienia”, ale równoważy je ekskluzywność - coś, czego nie ma w innych bazach danych. Oto na przykład niektóre unikalne funkcje Kliknij Dom:

  • Tablice, Kliknij Dom bardzo dobra obsługa tablic, a także możliwość wykonywania na nich skomplikowanych obliczeń.
  • Agregowanie struktur danych. To jedna z „zabójczych funkcji” Kliknij Dom. Pomimo tego, że chłopaki z Yandex mówią, że nie chcemy agregować danych, wszystko jest agregowane Kliknij Dom, ponieważ jest szybki i wygodny.
  • Zmaterializowane poglądy. Wraz z agregującymi strukturami danych, zmaterializowane widoki pozwalają na wygodę w czasie rzeczywistym zbiór.
  • KliknijDom SQL. To jest rozszerzenie języka SQL z kilkoma dodatkowymi i ekskluzywnymi funkcjami, które są dostępne tylko w Kliknij Dom. Wcześniej było to z jednej strony rozszerzenie, a z drugiej wada. Teraz prawie wszystkie wady w porównaniu do SQL92 usunęliśmy to, teraz jest to tylko rozszerzenie.
  • Lambda–wyrażenia. Czy są jeszcze w jakiejś bazie danych?
  • ML-wsparcie. Jest to dostępne w różnych bazach danych, niektóre są lepsze, inne gorsze.
  • otwarte źródło. Możemy rozwinąć Kliknij Dom razem. Teraz w Kliknij Dom około 500 autorów, a liczba ta stale rośnie.

Trudne zapytania

В Kliknij Dom istnieje wiele różnych sposobów zrobienia tej samej rzeczy. Na przykład możesz zwrócić ostatnią wartość z tabeli na trzy różne sposoby CPU (jest też czwarty, ale jeszcze bardziej egzotyczny).

Pierwsza pokazuje, jak wygodnie jest to zrobić Kliknij Dom zapytania, kiedy chcesz to sprawdzić krotka zawarte w podzapytaniu. Jest to coś, czego mi osobiście bardzo brakowało w innych bazach danych. Jeśli chcę porównać coś z podzapytaniem, to w innych bazach da się z tym porównać tylko skalar, ale dla kilku kolumn muszę napisać DOŁĄCZ, Kliknij Dom możesz użyć krotki:

SELECT *
  FROM cpu 
 WHERE (tags_id, created_at) IN 
    (SELECT tags_id, max(created_at)
        FROM cpu 
        GROUP BY tags_id)

Druga metoda robi to samo, ale wykorzystuje funkcję agregującą argMaks:

SELECT 
    argMax(usage_user), created_at),
    argMax(usage_system), created_at),
...
 FROM cpu 

В Kliknij Dom funkcji agregujących jest kilkadziesiąt, a jeśli użyjesz kombinatorów, to zgodnie z prawami kombinatoryki otrzymasz ich około tysiąca. ArgMaks - jedna z funkcji obliczających wartość maksymalną: żądanie zwraca wartość użytkownik_użytkownika, przy którym osiągana jest wartość maksymalna utworzony_at:

SELECT now() as created_at,
       cpu.*
  FROM (SELECT DISTINCT tags_id from cpu) base 
  ASOF LEFT JOIN cpu USING (tags_id, created_at)

DOŁĄCZ DO ASOF — „sklejanie” rzędów o różnym czasie. Jest to unikalna funkcja dla baz danych, która jest dostępna tylko w kdb +. Jeśli istnieją dwa szeregi czasowe o różnych czasach, DOŁĄCZ DO ASOF pozwala przenosić i łączyć je w jednym żądaniu. Dla każdej wartości z jednego szeregu czasowego zostaje znaleziona najbliższa wartość z drugiego szeregu i są one zwracane w tym samym wierszu:

Przeprowadzka do ClickHouse: 3 lata później

Funkcje analityczne

Standard SQL-2003 możesz napisać tak:

SELECT origin,
       timestamp,
       timestamp -LAG(timestamp, 1) OVER (PARTITION BY origin ORDER BY timestamp) AS duration,
       timestamp -MIN(timestamp) OVER (PARTITION BY origin ORDER BY timestamp) AS startseq_duration,
       ROW_NUMBER() OVER (PARTITION BY origin ORDER BY timestamp) AS sequence,
       COUNT() OVER (PARTITION BY origin ORDER BY timestamp) AS nb
  FROM mytable
ORDER BY origin, timestamp;

В Kliknij Dom Nie możesz tego zrobić – to nie obsługuje tego standardu SQL-2003 i prawdopodobnie nigdy tego nie zrobi. Zamiast tego w Kliknij Dom Zwyczajowo pisze się tak:

Przeprowadzka do ClickHouse: 3 lata później

Obiecałem lambdy - oto i są!

Jest to odpowiednik zapytania analitycznego w standardzie SQL-2003: liczy różnicę między nimi znacznik czasu, czas trwania, liczba porządkowa - wszystko, co zwykle uważamy za funkcje analityczne. W Kliknij Dom Liczymy je poprzez tablice: najpierw zwijamy dane w tablicę, potem robimy z tablicą wszystko, co chcemy, a następnie ponownie ją rozwijamy. Nie jest to zbyt wygodne, wymaga przynajmniej zamiłowania do programowania funkcjonalnego, ale jest bardzo elastyczne.

Cechy szczególne

Poza tym w Kliknij Dom wiele specjalistycznych funkcji. Na przykład, jak ustalić, ile sesji odbywa się jednocześnie? Typowym zadaniem monitorowania jest określenie maksymalnego obciążenia za pomocą jednego żądania. W Kliknij Dom Służy do tego specjalna funkcja:

Przeprowadzka do ClickHouse: 3 lata później

Ogólnie rzecz biorąc, ClickHouse ma specjalne funkcje do wielu celów:

  • bieganieRóżnica, bieganieAkumuluj, sąsiad;
  • sumMap(klucz, wartość);
  • timeSeriesGroupSum(uid, znacznik czasu, wartość);
  • timeSeriesGroupRateSum(uid, znacznik czasu, wartość);
  • skewPop, skewSamp, kurtPop, kurtSamp;
  • Z WYPEŁNIENIEM / Z WIĄZANIAMI;
  • prosta regresja liniowa, stochastyczna regresja liniowa.

To nie jest pełna lista funkcji, w sumie jest ich 500-600. Wskazówka: wszystkie funkcje w Kliknij Dom znajduje się w tabeli systemowej (nie wszystkie są udokumentowane, ale wszystkie są interesujące):

select * from system.functions order by name

Kliknij Dom przechowuje wiele informacji o sobie, w tym tabele dziennika, zapytanie_log, dziennik śledzenia, dziennik operacji z blokami danych (dziennik części), dziennik metryk i dziennik systemowy, który zwykle zapisuje na dysku. Metryki dziennika to szereg czasowy в Kliknij Dom Właściwie Kliknij Dom: Sama baza danych może odgrywać pewną rolę szereg czasowy baz danych, „pożerając” się w ten sposób.

Przeprowadzka do ClickHouse: 3 lata później

To także wyjątkowa rzecz – bo dla nas wykonujemy dobrą robotę szereg czasowydlaczego nie możemy przechowywać w sobie wszystkiego, czego potrzebujemy? Nie potrzebujemy Prometheus, zachowujemy wszystko dla siebie. Połączony grafana i monitorujemy siebie. Jeśli jednak Kliknij Dom upada, nie dowiemy się dlaczego, więc zazwyczaj tego nie robią.

Duże skupisko lub wiele małych Kliknij Dom

Co jest lepsze – jeden duży klaster czy wiele małych ClickHouse’ów? Tradycyjne podejście do DWH to duży klaster, w którym przydzielone są obwody dla każdej aplikacji. Przyszliśmy do administratora bazy danych - daj nam diagram, a on nam dał:

Przeprowadzka do ClickHouse: 3 lata później

В Kliknij Dom możesz to zrobić inaczej. Każdą aplikację możesz stworzyć własną Kliknij Dom:

Przeprowadzka do ClickHouse: 3 lata później

Nie potrzebujemy już tego wielkiego potwora DWH i nieustępliwi administratorzy. Każdej aplikacji możemy nadać własną Kliknij Dom, a programista może to zrobić sam, ponieważ Kliknij Dom bardzo łatwy w instalacji i nie wymaga skomplikowanej administracji:

Przeprowadzka do ClickHouse: 3 lata później

Ale jeśli mamy dużo Kliknij Dom, a musisz go często instalować, to chcesz zautomatyzować ten proces. Do tego możemy użyć np Kubernetes и dom kliknięć-operator. W Kubernetes ClickHouse możesz to umieścić „na kliknięcie”: mogę kliknąć przycisk, uruchomić manifest i baza danych jest gotowa. Mogę od razu stworzyć diagram, zacząć tam przesyłać metryki i w 5 minut mam gotowy dashboard grafana. To takie proste!

Wynik?

W ten sposób Kliknij Dom - to:

  • SZYBKOŚĆ. Każdy to wie.
  • ŁATWOŚĆ . Trochę kontrowersyjne, ale uważam, że jest trudne w treningu, łatwe w walce. Jeśli rozumiesz jak Kliknij Dom to działa, wtedy wszystko jest bardzo proste.
  • Uniwersalnie. Nadaje się do różnych scenariuszy: DWH, szeregi czasowe, przechowywanie logów. Ale to nie jest OLTP baza danych, więc nie próbuj tam robić krótkich wstawek i odczytów.
  • Ciekawe. Prawdopodobnie ten, z którym współpracuje Kliknij Dom, przeżyłem wiele ciekawych chwil w dobrym i złym tego słowa znaczeniu. Na przykład wyszło nowe wydanie, wszystko przestało działać. Albo gdy zmagałeś się z zadaniem przez dwa dni, ale po zadaniu pytania na czacie Telegramu, zadanie zostało rozwiązane w dwie minuty. Lub jak na konferencji w raporcie Leshy Milovidov, zrzut ekranu z Kliknij Dom przerwał transmisję Wysokie obciążenie++. Takie rzeczy zdarzają się cały czas i utrudniają nam życie. Kliknij Dom jasne i interesujące!

Możesz obejrzeć prezentację tutaj.

Przeprowadzka do ClickHouse: 3 lata później

Długo oczekiwane spotkanie twórców systemów wysokoobciążeniowych o godz Wysokie obciążenie++ odbędzie się 9 i 10 listopada w Skołkowie. Wreszcie będzie to konferencja offline (choć przy zachowaniu wszelkich środków ostrożności), ponieważ energii HighLoad++ nie można pakować online.

Na konferencję znajdujemy i pokazujemy przypadki dotyczące maksymalnych możliwości technologii: HighLoad++ było, jest i będzie jedynym miejscem, w którym w dwa dni można dowiedzieć się, jak działają Facebook, Yandex, VKontakte, Google i Amazon.

Spotkania odbywamy nieprzerwanie od 2007 roku, w tym roku spotkamy się już po raz czternasty. W tym czasie konferencja rozrosła się 14-krotnie, w ubiegłym roku kluczowe wydarzenie branżowe zgromadziło 10 uczestników, 3339 prelegentów, raporty i spotkania, a jednocześnie działało 165 torów.
W zeszłym roku przejechało 20 autobusów, 5280 litrów herbaty i kawy, 1650 litrów napojów owocowych i 10200 butelek wody. I kolejne 2640 kilogramów jedzenia, 16 000 talerzy i 25 000 kubków. Przy okazji za pieniądze zebrane z makulatury posadziliśmy 100 sadzonek dębu :)

Można kupić bilety tutaj, otrzymuj informacje o konferencji - tutaji rozmawiaj we wszystkich sieciach społecznościowych: Telegram, Facebook, WKontakcie и Twitter.

Źródło: www.habr.com

Dodaj komentarz