CrateDB - CrateDB
| Dezvoltatori | Crate.io, Inc. |
|---|---|
| Versiune stabila | 4.5 / 31.03.2021 |
| Repertoriu | https://github.com/crate/crate |
| Scris in | Java |
| Sistem de operare | Cross-platform |
| Tip | Magazin de date |
| Licență | Licență Apache 2.0 |
| Site-ul web | ladă |
CrateDB este un sistem de gestionare a bazelor de date SQL distribuit care integrează un depozit de date orientat către documente complet căutabil . Este open-source , scris în Java , bazat pe o arhitectură de nimic partajat și proiectat pentru o scalabilitate ridicată. CrateDB include componente de la Trino , Lucene , Elasticsearch și Netty .
Istorie
Proiectul CrateDB a fost început de Jodok Batlogg, un colaborator și creator open source care a contribuit la Open Source Initiative Vorarlberg în timp ce se afla la Lovely Systems din Dornbirn . Software-ul este o bază de date open source, grupată, utilizată pentru căutare rapidă de text și analize.
Compania, numită acum Crate.io, a ridicat prima rundă de finanțare în aprilie 2014. În iunie acel an, Crate.io a câștigat premiul pentru alegerea judecătorului la concursul GigaOm Structure Launchpad. În octombrie, Crate.io a câștigat TechCrunch Disrupt Europe la Londra.
Crate.io a încheiat o rundă de fondare de 4 milioane de dolari în martie 2016. În decembrie, CrateDB 1.0 a fost lansat, având peste un milion de descărcări.
CrateDB 2.0, prima ediție Enterprise a CrateDB, a fost lansat în mai 2017, după o rundă de 2,5 milioane de dolari de la Dawn Capital, Draper Esprit, Speedinvest și Sunstone Capital.
CrateDB 4.0 a fost lansat în iunie 2019.
Din septembrie 2020, Crate.io este condus de Eva Schönleitner în calitate de CEO.
Prezentare generală
Arhitectură
CrateDB funcționează într-o arhitectură nimic partajat ca un cluster de servere (noduri) configurate identic. Nodurile se coordonează pentru a distribui automat execuția atât a operațiunilor de scriere, cât și de interogare în cluster.
Interogare
Sintaxa SQL a CrateDB include JOIN-uri, agregări, indici, subinterogări, funcții definite de utilizator și vizualizări. De asemenea, acceptă căutarea textului complet, interogările geospațiale și coloanele de obiecte JSON imbricate.
Pentru distribuirea interogărilor, CrateDB implementează cache-uri de câmp coloane rezidente în memorie pe fiecare fragment. Memoriile cache indică motorului de interogare dacă există rânduri pe acel fragment care îndeplinesc criteriile de interogare și unde sunt situate rândurile. Aceasta se efectuează automat.
Scheme
CrateDB acceptă scheme „stricte”, „dinamice” sau „ignorate”:
- Schema strictă: dacă o instrucțiune INSERT include o coloană care nu a fost definită în tabel, CrateDB impune schema originală respingând INSERT și aruncând o eroare.
- Schemă dinamică: CrateDB actualizează automat schema indexând noua coloană.
- Schema ignorată: CrateDB nu indexează coloana, dar stochează valoarea simplă JSON.
Coerență
CrateDB implementează un model de inserare a datelor în cele din urmă consecvent , care nu blochează. Include versiunea de înregistrări, controlul concurenței optimist și o setare a frecvenței de reîmprospătare la nivel de masă, care obligă datele CrateDB să devină consistente la fiecare n milisecunde.
CrateDB acceptă consistența de citire după scriere: interogările care recuperează un anumit rând după cheia sa primară primesc întotdeauna cel mai recent rând. Toate celelalte interogări (operațiuni de căutare) returnează date consecvente în cele din urmă.
Operațiile de căutare sunt efectuate pe IndexReaders partajate , care oferă capacități de cache și de căutare inversă pentru cioburi. Un IndexReader este întotdeauna legat de segmentul Lucene de la care a fost pornit, ceea ce înseamnă că trebuie actualizat pentru a vedea modificări noi. Prin urmare, o căutare vede o modificare numai dacă IndexReader-ul asociat a fost reîmprospătat după ce a avut loc această modificare. În mod implicit, acest lucru se face o dată pe secundă, dar poate fi reconfigurat pentru a avea loc mai mult sau mai puțin frecvent.
Fiecare fragment de replică este actualizat sincron cu primarul său și poartă întotdeauna aceleași informații. Prin urmare, din punct de vedere al consistenței, nu contează dacă este accesat fragmentul primar sau un fragment de replică. În CrateDB, doar reîmprospătarea IndexReaderului afectează consistența.
Atomicitate și durabilitate
CrateDB implementează WAL ( înregistrare în avans):
- Operațiile pe rânduri (care sunt stocate intern în CrateDB ca documente JSON) sunt atomice.
- Operațiile pe rânduri sunt persistate pe disc fără a fi nevoie să emiteți un Lucene-commit pentru fiecare operație de scriere. Când translogul este spălat, toate datele sunt scrise în stocarea indice persistentă a Lucene și translogul este șters.
- În cazul închiderii necurate a unui fragment, tranzacțiile din translog sunt redate la pornire, pentru a se asigura că toate operațiunile executate sunt permanente.
- Translogul este, de asemenea, transferat direct atunci când o replică nou alocată se inițializează din fragmentul primar.