Apache Cassandra - Rozproszony system bazodanowyCQL...

Post on 22-May-2020

5 views 0 download

Transcript of Apache Cassandra - Rozproszony system bazodanowyCQL...

Apache CassandraRozproszony system bazodanowy

Bartosz Szreder

Bartosz Szreder Apache Cassandra 1 / 10

Co to jest?

Rozproszona baza danych napisana w Java (gossip-based distributed system).NoSQL (CQL – Cassandra Query Language).Open-source na licencji Apache 2.0.Pierwotna wersja opracowana w Facebooku na potrzeby przeszukiwaniaskrzynek odbiorczych.

Bartosz Szreder Apache Cassandra 2 / 10

Co to jest?

Rozproszona baza danych napisana w Java (gossip-based distributed system).

NoSQL (CQL – Cassandra Query Language).Open-source na licencji Apache 2.0.Pierwotna wersja opracowana w Facebooku na potrzeby przeszukiwaniaskrzynek odbiorczych.

Bartosz Szreder Apache Cassandra 2 / 10

Co to jest?

Rozproszona baza danych napisana w Java (gossip-based distributed system).NoSQL (CQL – Cassandra Query Language).

Open-source na licencji Apache 2.0.Pierwotna wersja opracowana w Facebooku na potrzeby przeszukiwaniaskrzynek odbiorczych.

Bartosz Szreder Apache Cassandra 2 / 10

Co to jest?

Rozproszona baza danych napisana w Java (gossip-based distributed system).NoSQL (CQL – Cassandra Query Language).Open-source na licencji Apache 2.0.

Pierwotna wersja opracowana w Facebooku na potrzeby przeszukiwaniaskrzynek odbiorczych.

Bartosz Szreder Apache Cassandra 2 / 10

Co to jest?

Rozproszona baza danych napisana w Java (gossip-based distributed system).NoSQL (CQL – Cassandra Query Language).Open-source na licencji Apache 2.0.Pierwotna wersja opracowana w Facebooku na potrzeby przeszukiwaniaskrzynek odbiorczych.

Bartosz Szreder Apache Cassandra 2 / 10

Czym się chwalą?

Wysoka wydajność (cokolwiek to znaczy).

Liniowa skalowalność.Decentralizacja.Odporność na awarie.

Bartosz Szreder Apache Cassandra 3 / 10

Czym się chwalą?

Wysoka wydajność (cokolwiek to znaczy).Liniowa skalowalność.

Decentralizacja.Odporność na awarie.

Bartosz Szreder Apache Cassandra 3 / 10

Czym się chwalą?

Wysoka wydajność (cokolwiek to znaczy).Liniowa skalowalność.Decentralizacja.

Odporność na awarie.

Bartosz Szreder Apache Cassandra 3 / 10

Czym się chwalą?

Wysoka wydajność (cokolwiek to znaczy).Liniowa skalowalność.Decentralizacja.Odporność na awarie.

Bartosz Szreder Apache Cassandra 3 / 10

Decentralizacja i odporność

Nie ma SPOF. Nie ma żadnej „głównej” repliki.

Awarie węzłów nie zaburzają działania aplikacji.Można dostawiać węzły w locie.Przezroczystość z punktu widzenia aplikacji.

Bartosz Szreder Apache Cassandra 4 / 10

Decentralizacja i odporność

Nie ma SPOF. Nie ma żadnej „głównej” repliki.Awarie węzłów nie zaburzają działania aplikacji.

Można dostawiać węzły w locie.Przezroczystość z punktu widzenia aplikacji.

Bartosz Szreder Apache Cassandra 4 / 10

Decentralizacja i odporność

Nie ma SPOF. Nie ma żadnej „głównej” repliki.Awarie węzłów nie zaburzają działania aplikacji.Można dostawiać węzły w locie.

Przezroczystość z punktu widzenia aplikacji.

Bartosz Szreder Apache Cassandra 4 / 10

Decentralizacja i odporność

Nie ma SPOF. Nie ma żadnej „głównej” repliki.Awarie węzłów nie zaburzają działania aplikacji.Można dostawiać węzły w locie.Przezroczystość z punktu widzenia aplikacji.

Bartosz Szreder Apache Cassandra 4 / 10

Model danych

Wiersze indeksowane kluczem, tabele podzielone na tablety o ciągłychprzedziałach kluczy.

Odczyty z i zapisy do jednego wiersza są atomowe (niezależnie od liczbykolumn).Kolumny są grupowane w tzw. rodziny kolumn, w których ustalamy klucze(de facto indeksy).Wsparcie dla transakcji na poziomie pojedynczego wiersza.. . . ale nie dla „ogólnych” transakcji na zbiorze wierszy (jeszcze? nadal?).

Bartosz Szreder Apache Cassandra 5 / 10

Model danych

Wiersze indeksowane kluczem, tabele podzielone na tablety o ciągłychprzedziałach kluczy.Odczyty z i zapisy do jednego wiersza są atomowe (niezależnie od liczbykolumn).

Kolumny są grupowane w tzw. rodziny kolumn, w których ustalamy klucze(de facto indeksy).Wsparcie dla transakcji na poziomie pojedynczego wiersza.. . . ale nie dla „ogólnych” transakcji na zbiorze wierszy (jeszcze? nadal?).

Bartosz Szreder Apache Cassandra 5 / 10

Model danych

Wiersze indeksowane kluczem, tabele podzielone na tablety o ciągłychprzedziałach kluczy.Odczyty z i zapisy do jednego wiersza są atomowe (niezależnie od liczbykolumn).Kolumny są grupowane w tzw. rodziny kolumn, w których ustalamy klucze(de facto indeksy).

Wsparcie dla transakcji na poziomie pojedynczego wiersza.. . . ale nie dla „ogólnych” transakcji na zbiorze wierszy (jeszcze? nadal?).

Bartosz Szreder Apache Cassandra 5 / 10

Model danych

Wiersze indeksowane kluczem, tabele podzielone na tablety o ciągłychprzedziałach kluczy.Odczyty z i zapisy do jednego wiersza są atomowe (niezależnie od liczbykolumn).Kolumny są grupowane w tzw. rodziny kolumn, w których ustalamy klucze(de facto indeksy).Wsparcie dla transakcji na poziomie pojedynczego wiersza.

. . . ale nie dla „ogólnych” transakcji na zbiorze wierszy (jeszcze? nadal?).

Bartosz Szreder Apache Cassandra 5 / 10

Model danych

Wiersze indeksowane kluczem, tabele podzielone na tablety o ciągłychprzedziałach kluczy.Odczyty z i zapisy do jednego wiersza są atomowe (niezależnie od liczbykolumn).Kolumny są grupowane w tzw. rodziny kolumn, w których ustalamy klucze(de facto indeksy).Wsparcie dla transakcji na poziomie pojedynczego wiersza.. . . ale nie dla „ogólnych” transakcji na zbiorze wierszy (jeszcze? nadal?).

Bartosz Szreder Apache Cassandra 5 / 10

Jak działają zapisy?

Zapisy idą najpierw do CommitLog.

CommitLog zapisywany co pewien czas (zależnie od konfigu).Potem zapisy trafiają do Memtable.Memtable to cache wierszy indeksowanych kluczem. Jak się zapcha, robimyflush.Flush powoduje sortowanie wierszy w Memtable po kluczu i sekwencyjnyzapis.W wyniku flusha powstaje niemutowalna struktura SSTable.Odczyt potencjalnie zbiera kawałki danych z wielu SSTable na dysku iMemtable w RAM.

Bartosz Szreder Apache Cassandra 6 / 10

Jak działają zapisy?

Zapisy idą najpierw do CommitLog.CommitLog zapisywany co pewien czas (zależnie od konfigu).

Potem zapisy trafiają do Memtable.Memtable to cache wierszy indeksowanych kluczem. Jak się zapcha, robimyflush.Flush powoduje sortowanie wierszy w Memtable po kluczu i sekwencyjnyzapis.W wyniku flusha powstaje niemutowalna struktura SSTable.Odczyt potencjalnie zbiera kawałki danych z wielu SSTable na dysku iMemtable w RAM.

Bartosz Szreder Apache Cassandra 6 / 10

Jak działają zapisy?

Zapisy idą najpierw do CommitLog.CommitLog zapisywany co pewien czas (zależnie od konfigu).Potem zapisy trafiają do Memtable.

Memtable to cache wierszy indeksowanych kluczem. Jak się zapcha, robimyflush.Flush powoduje sortowanie wierszy w Memtable po kluczu i sekwencyjnyzapis.W wyniku flusha powstaje niemutowalna struktura SSTable.Odczyt potencjalnie zbiera kawałki danych z wielu SSTable na dysku iMemtable w RAM.

Bartosz Szreder Apache Cassandra 6 / 10

Jak działają zapisy?

Zapisy idą najpierw do CommitLog.CommitLog zapisywany co pewien czas (zależnie od konfigu).Potem zapisy trafiają do Memtable.Memtable to cache wierszy indeksowanych kluczem. Jak się zapcha, robimyflush.

Flush powoduje sortowanie wierszy w Memtable po kluczu i sekwencyjnyzapis.W wyniku flusha powstaje niemutowalna struktura SSTable.Odczyt potencjalnie zbiera kawałki danych z wielu SSTable na dysku iMemtable w RAM.

Bartosz Szreder Apache Cassandra 6 / 10

Jak działają zapisy?

Zapisy idą najpierw do CommitLog.CommitLog zapisywany co pewien czas (zależnie od konfigu).Potem zapisy trafiają do Memtable.Memtable to cache wierszy indeksowanych kluczem. Jak się zapcha, robimyflush.Flush powoduje sortowanie wierszy w Memtable po kluczu i sekwencyjnyzapis.

W wyniku flusha powstaje niemutowalna struktura SSTable.Odczyt potencjalnie zbiera kawałki danych z wielu SSTable na dysku iMemtable w RAM.

Bartosz Szreder Apache Cassandra 6 / 10

Jak działają zapisy?

Zapisy idą najpierw do CommitLog.CommitLog zapisywany co pewien czas (zależnie od konfigu).Potem zapisy trafiają do Memtable.Memtable to cache wierszy indeksowanych kluczem. Jak się zapcha, robimyflush.Flush powoduje sortowanie wierszy w Memtable po kluczu i sekwencyjnyzapis.W wyniku flusha powstaje niemutowalna struktura SSTable.

Odczyt potencjalnie zbiera kawałki danych z wielu SSTable na dysku iMemtable w RAM.

Bartosz Szreder Apache Cassandra 6 / 10

Jak działają zapisy?

Zapisy idą najpierw do CommitLog.CommitLog zapisywany co pewien czas (zależnie od konfigu).Potem zapisy trafiają do Memtable.Memtable to cache wierszy indeksowanych kluczem. Jak się zapcha, robimyflush.Flush powoduje sortowanie wierszy w Memtable po kluczu i sekwencyjnyzapis.W wyniku flusha powstaje niemutowalna struktura SSTable.Odczyt potencjalnie zbiera kawałki danych z wielu SSTable na dysku iMemtable w RAM.

Bartosz Szreder Apache Cassandra 6 / 10

Dokąd trafiają poszczególne dane?

Klucz wiersza.Współczynnik replikacji (ile węzłów ma replikować dany wiersz).Strategia replikacji (które węzły mają replikować dany wiersz).

Strategia może być prosta (kolejne węzły w pierścieniu) albo uwzględniającafizyczną topologię sieci (podział na szafy, fizyczne położenie na świecie itd.).

Cassandra nie zmienia zbioru węzłów dla danego wiersza w oparciu o zmienneparametry, w rodzaju bieżącego obciążenia, dostępności węzłów czy tego,z którymi węzłami rozmawia klient.

Bartosz Szreder Apache Cassandra 7 / 10

Dokąd trafiają poszczególne dane?

Klucz wiersza.Współczynnik replikacji (ile węzłów ma replikować dany wiersz).Strategia replikacji (które węzły mają replikować dany wiersz).

Strategia może być prosta (kolejne węzły w pierścieniu) albo uwzględniającafizyczną topologię sieci (podział na szafy, fizyczne położenie na świecie itd.).

Cassandra nie zmienia zbioru węzłów dla danego wiersza w oparciu o zmienneparametry, w rodzaju bieżącego obciążenia, dostępności węzłów czy tego,z którymi węzłami rozmawia klient.

Bartosz Szreder Apache Cassandra 7 / 10

Dokąd trafiają poszczególne dane?

Klucz wiersza.Współczynnik replikacji (ile węzłów ma replikować dany wiersz).Strategia replikacji (które węzły mają replikować dany wiersz).

Strategia może być prosta (kolejne węzły w pierścieniu) albo uwzględniającafizyczną topologię sieci (podział na szafy, fizyczne położenie na świecie itd.).

Cassandra nie zmienia zbioru węzłów dla danego wiersza w oparciu o zmienneparametry, w rodzaju bieżącego obciążenia, dostępności węzłów czy tego,z którymi węzłami rozmawia klient.

Bartosz Szreder Apache Cassandra 7 / 10

Odśmiecanie i scalanie struktur

Co N operacji flush zbierz N SSTable o podobnym rozmiarze i mergujsekwencyjnie.

Po scaleniu usuń stare SSTables.W starszych wersjach Cassandra tylko scalanie mogło usuwać „nagrobki”.

Bartosz Szreder Apache Cassandra 8 / 10

Odśmiecanie i scalanie struktur

Co N operacji flush zbierz N SSTable o podobnym rozmiarze i mergujsekwencyjnie.Po scaleniu usuń stare SSTables.

W starszych wersjach Cassandra tylko scalanie mogło usuwać „nagrobki”.

Bartosz Szreder Apache Cassandra 8 / 10

Odśmiecanie i scalanie struktur

Co N operacji flush zbierz N SSTable o podobnym rozmiarze i mergujsekwencyjnie.Po scaleniu usuń stare SSTables.W starszych wersjach Cassandra tylko scalanie mogło usuwać „nagrobki”.

Bartosz Szreder Apache Cassandra 8 / 10

CQL

Cassandra does not support joins or subqueries, except for batch analysis throughHadoop. Rather, Cassandra emphasizes denormalization through features likecollections.

At one level, Cassandra tables, rows, and columns can be thought of much thesame way as those in a relational database. In both SQL and CQL you definetables, which have defined columns and associated data types, and you can createindexes to allow efficient querying by column values.

However, an important difference is that since Cassandra is designed from theground up as a distributed system, it emphasizes denormalization instead ofnormalization and joins, and provides tools like collections to support this.

Bartosz Szreder Apache Cassandra 9 / 10

CQL

Cassandra does not support joins or subqueries, except for batch analysis throughHadoop. Rather, Cassandra emphasizes denormalization through features likecollections.

At one level, Cassandra tables, rows, and columns can be thought of much thesame way as those in a relational database. In both SQL and CQL you definetables, which have defined columns and associated data types, and you can createindexes to allow efficient querying by column values.

However, an important difference is that since Cassandra is designed from theground up as a distributed system, it emphasizes denormalization instead ofnormalization and joins, and provides tools like collections to support this.

Bartosz Szreder Apache Cassandra 9 / 10

CQL

Cassandra does not support joins or subqueries, except for batch analysis throughHadoop. Rather, Cassandra emphasizes denormalization through features likecollections.

At one level, Cassandra tables, rows, and columns can be thought of much thesame way as those in a relational database. In both SQL and CQL you definetables, which have defined columns and associated data types, and you can createindexes to allow efficient querying by column values.

However, an important difference is that since Cassandra is designed from theground up as a distributed system, it emphasizes denormalization instead ofnormalization and joins, and provides tools like collections to support this.

Bartosz Szreder Apache Cassandra 9 / 10

Ograniczenia

Brak joinów i podzapytań (o tym było).

Wszystkie dane w pojedynczym tablecie muszą zmieścić się na pojedynczejmaszynie w klastrze.Klucze wierszy nie mogą przekraczać 64 KiB.Maksymalna liczba komórek (wiersze × kolumny) w pojedynczym tablecie to2 miliardy.A single column value may not be larger than 2GB; in practice, „single digitsof MB” is a more reasonable limit, since there is no streaming or randomaccess of blob values.Collection values may not be larger than 64KB.

Bartosz Szreder Apache Cassandra 10 / 10

Ograniczenia

Brak joinów i podzapytań (o tym było).Wszystkie dane w pojedynczym tablecie muszą zmieścić się na pojedynczejmaszynie w klastrze.

Klucze wierszy nie mogą przekraczać 64 KiB.Maksymalna liczba komórek (wiersze × kolumny) w pojedynczym tablecie to2 miliardy.A single column value may not be larger than 2GB; in practice, „single digitsof MB” is a more reasonable limit, since there is no streaming or randomaccess of blob values.Collection values may not be larger than 64KB.

Bartosz Szreder Apache Cassandra 10 / 10

Ograniczenia

Brak joinów i podzapytań (o tym było).Wszystkie dane w pojedynczym tablecie muszą zmieścić się na pojedynczejmaszynie w klastrze.Klucze wierszy nie mogą przekraczać 64 KiB.

Maksymalna liczba komórek (wiersze × kolumny) w pojedynczym tablecie to2 miliardy.A single column value may not be larger than 2GB; in practice, „single digitsof MB” is a more reasonable limit, since there is no streaming or randomaccess of blob values.Collection values may not be larger than 64KB.

Bartosz Szreder Apache Cassandra 10 / 10

Ograniczenia

Brak joinów i podzapytań (o tym było).Wszystkie dane w pojedynczym tablecie muszą zmieścić się na pojedynczejmaszynie w klastrze.Klucze wierszy nie mogą przekraczać 64 KiB.Maksymalna liczba komórek (wiersze × kolumny) w pojedynczym tablecie to2 miliardy.

A single column value may not be larger than 2GB; in practice, „single digitsof MB” is a more reasonable limit, since there is no streaming or randomaccess of blob values.Collection values may not be larger than 64KB.

Bartosz Szreder Apache Cassandra 10 / 10

Ograniczenia

Brak joinów i podzapytań (o tym było).Wszystkie dane w pojedynczym tablecie muszą zmieścić się na pojedynczejmaszynie w klastrze.Klucze wierszy nie mogą przekraczać 64 KiB.Maksymalna liczba komórek (wiersze × kolumny) w pojedynczym tablecie to2 miliardy.A single column value may not be larger than 2GB; in practice, „single digitsof MB” is a more reasonable limit, since there is no streaming or randomaccess of blob values.

Collection values may not be larger than 64KB.

Bartosz Szreder Apache Cassandra 10 / 10

Ograniczenia

Brak joinów i podzapytań (o tym było).Wszystkie dane w pojedynczym tablecie muszą zmieścić się na pojedynczejmaszynie w klastrze.Klucze wierszy nie mogą przekraczać 64 KiB.Maksymalna liczba komórek (wiersze × kolumny) w pojedynczym tablecie to2 miliardy.A single column value may not be larger than 2GB; in practice, „single digitsof MB” is a more reasonable limit, since there is no streaming or randomaccess of blob values.Collection values may not be larger than 64KB.

Bartosz Szreder Apache Cassandra 10 / 10