CrateDB - CrateDB
| Sviluppatore/i | Crate.io, Inc. |
|---|---|
| Rilascio stabile | 4.5 / 31.03.2021 |
| Repository | https://github.com/crate/crate |
| Scritto in | Giava |
| Sistema operativo | Multipiattaforma |
| Tipo | Archivio dati |
| Licenza | Licenza Apache 2.0 |
| Sito web | cassa |
CrateDB è un sistema di gestione di database SQL distribuito che integra un archivio di dati orientato ai documenti completamente ricercabile . È open-source , scritto in Java , basato su un'architettura shared-nothing e progettato per un'elevata scalabilità. CrateDB include componenti di Trino , Lucene , Elasticsearch e Netty .
Storia
Il progetto CrateDB è stato avviato da Jodok Batlogg, un collaboratore e creatore open source che ha contribuito all'Open Source Initiative Vorarlberg mentre lavorava a Lovely Systems a Dornbirn . Il software è un database cluster open source utilizzato per la ricerca rapida e l'analisi del testo.
La società, ora chiamata Crate.io, ha raccolto il suo primo round di finanziamento nell'aprile 2014. Nel giugno di quell'anno, Crate.io ha vinto il premio per la scelta del giudice al concorso GigaOm Structure Launchpad. A ottobre, Crate.io ha vinto il TechCrunch Disrupt Europe a Londra.
Crate.io ha chiuso un round di fondazione da $ 4 milioni a marzo 2016. A dicembre, CrateDB 1.0 è stato rilasciato con oltre un milione di download.
CrateDB 2.0, la prima Enterprise Edition di CrateDB, è stata rilasciata a maggio 2017 dopo un round di $ 2,5 milioni da Dawn Capital, Draper Esprit, Speedinvest e Sunstone Capital.
CrateDB 4.0 è stato rilasciato a giugno 2019.
Da settembre 2020, Crate.io è guidato da Eva Schönleitner in qualità di CEO.
Panoramica
Architettura
CrateDB opera in un'architettura shared-nothing come un cluster di server (nodi) configurati in modo identico. I nodi si coordinano per distribuire automaticamente l'esecuzione di operazioni di scrittura e query nel cluster.
interrogazione
La sintassi SQL di CrateDB include JOIN, aggregazioni, indici, sottoquery, funzioni definite dall'utente e viste. Supporta anche la ricerca full-text, le query geospaziali e le colonne di oggetti JSON nidificati.
Per la distribuzione delle query, CrateDB implementa cache di campi colonnari residenti in memoria su ogni shard. Le cache comunicano al motore di query se ci sono righe su quel frammento che soddisfano i criteri di query e dove si trovano le righe. Questo viene eseguito automaticamente.
Schemi
CrateDB supporta schemi "rigorosi", "dinamici" o "ignorati":
- Schema rigoroso: se un'istruzione INSERT include una colonna che non è stata definita nella tabella, CrateDB applica lo schema originale rifiutando INSERT e generando un errore.
- Schema dinamico: CrateDB aggiorna automaticamente lo schema indicizzando la nuova colonna.
- Schema ignorato: CrateDB non indicizza la colonna, ma memorizza il semplice valore JSON.
Consistenza
CrateDB implementa un modello di inserimento dati coerente e non bloccante. Include il controllo delle versioni dei record, il controllo ottimistico della concorrenza e un'impostazione della frequenza di aggiornamento a livello di tabella, che obbliga i dati di CrateDB a diventare coerenti ogni n millisecondi.
CrateDB supporta la coerenza read-after-write: le query che recuperano una riga specifica tramite la sua chiave primaria ricevono sempre la riga più recente. Tutte le altre query (operazioni di ricerca) restituiscono dati eventualmente coerenti.
Le operazioni di ricerca vengono eseguite su IndexReaders condivisi , che forniscono funzionalità di memorizzazione nella cache e ricerca inversa per gli shard. Un IndexReader è sempre associato al segmento Lucene da cui è stato avviato, il che significa che deve essere aggiornato per vedere nuove modifiche. Pertanto, una ricerca vede una modifica solo se l'IndexReader associato è stato aggiornato dopo che si è verificata tale modifica. Per impostazione predefinita, questa operazione viene eseguita una volta al secondo, ma può essere riconfigurata in modo che si verifichi più o meno frequentemente.
Ogni frammento di replica viene aggiornato in modo sincrono con il suo primario e contiene sempre le stesse informazioni. Pertanto, in termini di coerenza, non importa se si accede al frammento primario oa quello di replica. In CrateDB, solo l'aggiornamento di IndexReader influisce sulla consistenza.
Atomicità e durata
CrateDB implementa WAL (registrazione write-ahead):
- Le operazioni sulle righe (che sono archiviate internamente in CrateDB come documenti JSON) sono atomiche.
- Le operazioni sulle righe vengono mantenute su disco senza dover emettere un commit Lucene per ogni operazione di scrittura. Quando il translog viene svuotato, tutti i dati vengono scritti nell'archivio di indice persistente di Lucene e il translog viene cancellato.
- Nel caso di un arresto non pulito di uno shard, le transazioni nel translog vengono riprodotte all'avvio, per garantire che tutte le operazioni eseguite siano permanenti.
- Il translog viene anche trasferito direttamente quando una replica appena allocata si inizializza dallo shard primario.