CrateDB

CrateDB
Deweloperzy Crate.io, Inc.
Wersja stabilna
4.6.4 / 06.10.2021
Magazyn https://github.com/crate/crate
Napisane w Jawa
System operacyjny Międzyplatformowe
Typ Magazyn danych
Licencja Licencja Apache 2.0
Strona internetowa skrzynia .io

CrateDB to rozproszony system zarządzania bazą danych SQL , który integruje w pełni przeszukiwalny magazyn danych zorientowany na dokumenty . Jest open source , napisany w Javie , oparty na architekturze nic nieudostępnianego i zaprojektowany z myślą o wysokiej skalowalności. CrateDB zawiera komponenty firm Trino , Lucene , Elasticsearch i Netty .

Historia

Projekt CrateDB został zapoczątkowany przez Christiana Lutza, Bernda Dorna i Jodoka Batlogga, współtwórcę i twórcę open source, który przyczynił się do Open Source Initiative Vorarlberg podczas pracy w Lovely Systems w Dornbirn . Oprogramowanie to klastrowana baza danych o otwartym kodzie źródłowym, używana do szybkiego wyszukiwania tekstu i analiz.

Firma, obecnie nazywająca się Crate.io, pozyskała pierwszą rundę finansowania w kwietniu 2014 r. W czerwcu tego roku Crate.io zdobyła nagrodę jury w konkursie GigaOm Structure Launchpad. W październiku Crate.io wygrał TechCrunch Disrupt Europe w Londynie.

Crate.io zamknęło rundę założycielską o wartości 4 milionów dolarów w marcu 2016 r. W grudniu wydano CrateDB 1.0 z ponad milionem pobrań.

CrateDB 2.0, pierwsza edycja CrateDB dla przedsiębiorstw, została wydana w maju 2017 r. po rundzie o wartości 2,5 mln USD od Dawn Capital, Draper Esprit, Speedinvest i Sunstone Capital. W czerwcu 2021 Crate.io ogłosiło kolejną rundę finansowania w wysokości 10 milionów dolarów.

Od września 2020 r. Crate.io jest kierowana przez Evę Schönleitner jako CEO.

Przegląd

Architektura

CrateDB działa w architekturze nic niedzielonego jako klaster identycznie skonfigurowanych serwerów (węzłów). Węzły koordynują automatyczne rozdzielanie wykonywania operacji zapisu i zapytań w klastrze.

zapytanie

Składnia SQL CrateDB obejmuje JOIN, agregacje, indeksy, zapytania podrzędne, funkcje zdefiniowane przez użytkownika i widoki. Obsługuje również wyszukiwanie pełnotekstowe, zapytania geoprzestrzenne i zagnieżdżone kolumny obiektów JSON.

W przypadku dystrybucji zapytań CrateDB implementuje rezydujące w pamięci pamięci podręczne pól kolumnowych na każdym fragmencie. Pamięci podręczne informują aparat zapytań, czy w tym fragmencie znajdują się wiersze spełniające kryteria zapytania i gdzie znajdują się te wiersze. Jest to wykonywane automatycznie.

Schematy

CrateDB obsługuje schematy „ścisłe”, „dynamiczne” lub „ignorowane”:

  • Ścisły schemat: jeśli instrukcja INSERT zawiera kolumnę, która nie została zdefiniowana w tabeli, CrateDB wymusza oryginalny schemat, odrzucając INSERT i zgłaszając błąd.
  • Schemat dynamiczny: CrateDB automatycznie aktualizuje schemat, indeksując nową kolumnę.
  • Zignorowany schemat: CrateDB nie indeksuje kolumny, ale przechowuje zwykłą wartość JSON.

Konsystencja

CrateDB implementuje ostatecznie spójny , nieblokujący model wstawiania danych. Obejmuje wersjonowanie rekordów, optymistyczną kontrolę współbieżności oraz ustawianie częstotliwości odświeżania na poziomie tabeli, co wymusza spójność danych CrateDB co n milisekund.

CrateDB obsługuje spójność odczytu po zapisie: zapytania pobierające określony wiersz na podstawie jego klucza podstawowego zawsze otrzymują najnowszy wiersz. Wszystkie inne zapytania (operacje wyszukiwania) zwracają ostatecznie spójne dane.

Operacje wyszukiwania są wykonywane na udostępnionych IndexReaders , które zapewniają funkcje buforowania i wyszukiwania wstecznego dla fragmentów. IndexReader jest zawsze powiązany z segmentem Lucene, z którego został uruchomiony, co oznacza, że ​​musi zostać odświeżony, aby zobaczyć nowe zmiany. W związku z tym wyszukiwanie widzi zmianę tylko wtedy, gdy powiązany IndexReader został odświeżony po wystąpieniu tej zmiany. Domyślnie odbywa się to raz na sekundę, ale można zmienić konfigurację tak, aby odbywało się to częściej lub rzadziej.

Każdy fragment repliki jest aktualizowany synchronicznie ze swoim podstawowym fragmentem i zawsze zawiera te same informacje. W związku z tym pod względem spójności nie ma znaczenia, czy uzyskuje się dostęp do fragmentu podstawowego, czy repliki. W CrateDB tylko odświeżenie IndexReadera wpływa na spójność.

Atomowość i trwałość

CrateDB implementuje WAL ( rejestrowanie zapisu z wyprzedzeniem ):

  • Operacje na wierszach (które są przechowywane wewnętrznie w CrateDB jako dokumenty JSON) są atomowe.
  • Operacje na wierszach są utrwalane na dysku bez konieczności wydawania zatwierdzenia Lucene dla każdej operacji zapisu. Kiedy translog zostaje opróżniony, wszystkie dane są zapisywane w trwałym magazynie indeksów Lucene, a translog zostaje wyczyszczony.
  • W przypadku nieczystego zamknięcia fragmentu transakcje w translogu są odtwarzane po uruchomieniu, aby zapewnić, że wszystkie wykonane operacje są trwałe.
  • Translog jest również przesyłany bezpośrednio, gdy nowo przydzielona replika inicjuje się z podstawowego fragmentu.

Linki zewnętrzne