Rilascio del DBMS DuckDB 1.2.0

Pubblicata la versione del DBMS DuckDB 1.2.0, orientata all'esecuzione di query analitiche e concettualmente simile a SQLite. DuckDB unisce le proprietà di SQLite, come compattezza, connessione come libreria incorporata, memorizzazione del database in un file e interfaccia CLI, con funzionalità e ottimizzazioni per l'esecuzione di query analitiche che coprono una parte significativa dei dati memorizzati, ad esempio, eseguendo aggregazioni di tutto il contenuto delle tabelle o unendo più grandi tabelle. Il codice del progetto è scritto in C++ e distribuito con licenza MIT.

DuckDB offre un dialetto SQL esteso, inclusi ulteriori funzionalità per gestire query molto complesse e a lungo termine. È possibile utilizzare tipi complessi (array, strutture, unioni), oltre a eseguire sottoquery correlate arbitrari e nidificati. Viene supportata l'esecuzione simultanea di più query, con la possibilità di eseguire query direttamente da file nei formati CSV e Parquet. È disponibile il supporto per l'importazione da DBMS PostgreSQL.

Il progetto utilizza un'interfaccia di SQLite, un parser di PostgreSQL, il componente Date Math di MonetDB, una propria implementazione delle funzioni di finestra (basata sull'algoritmo Segment Tree Aggregation), un gestore di espressioni regolari basato sulla libreria RE2, un ottimizzatore di query personalizzato, un meccanismo MVCC per la gestione della concorrenza (Multi-Version Concurrency Control), oltre a un motore di esecuzione delle query vettorializzato basato sull'algoritmo Hyper-Pipelining Query Execution, che consente di elaborare grandi set di valori in un'unica operazione.

Nella nuova versione:

  • È stata implementata la supporto per nuovi metodi di compressione che non sono inclusi per impostazione predefinita per mantenere la compatibilità dei file del database con versioni precedenti di DuckDB. Per utilizzare il formato migliorato dei file del database, è stata proposta la possibilità di collegare il database a un numero di versione: all'apertura del file con il parametro "STORAGE_VERSION", ora è possibile impostare la versione minima supportata del database ("ATTACH 'file.db' (STORAGE_VERSION 'v1.2.0');"). Per convertire il nuovo formato nel vecchio, è possibile utilizzare il comando SQL COPY, ad esempio: ATTACH 'file1.db'; ATTACH 'converted_file.db' (STORAGE_VERSION 'v1.0.0'); COPY FROM DATABASE file1 TO converted_file;
  • È stato aggiunto il supporto per il comando SQL "ALTER TABLE ... ADD PRIMARY KEY" per aggiungere una chiave primaria a una tabella esistente.
  • Rimosso il limite che non consentiva di aggiungere nuovamente identificatori per i quali era presente un indice di tracciamento dell'unicità, se quegli identificatori erano stati eliminati nella transazione corrente. Ad esempio, il codice SQL sottostante ora non genera errori: CREATE TABLE students (id INTEGER PRIMARY KEY, name VARCHAR); INSERT INTO students VALUES (1, 'John Doe'); BEGIN; DELETE FROM students WHERE id = 1; INSERT INTO students VALUES (1, 'Jane Doe');
  • Aggiunta la supporto per il caricamento di file CSV in codifiche Latin-1 e UTF-16 (in precedenza era supportata solo la codifica UTF-8). FROM read_csv('cities-latin-1.csv', encoding = 'latin-1');
  • Aggiunta la supporto per l'uso di delimitatori multibyte (fino a 4 byte) nei file CSV, consentendo di utilizzare emoji come delimitatori di colonna. a🦆b hello🦆world FROM read_csv('example.dsv', sep = '🦆');
  • Per impostazione predefinita, è attivata la modalità rigorosa per l'analisi dei file CSV ('strict_mode = true'), che verifica la conformità al formato della specifica RFC 4180. In modalità rigorosa è consentito utilizzare solo un simbolo per separare le righe, il che porterà a un errore se si tenta di analizzare file in cui le righe sono separate non solo dal simbolo di nuova riga, ma anche dal ritorno a capo ('\r\n').
  • Nel parser CSV è stato introdotto un nuovo algoritmo per la determinazione della nuova riga, che supporta l'esecuzione parallela delle operazioni. L'uso del nuovo algoritmo ha accelerato l'analisi dei CSV di circa il 15%.
  • Rimosso il limite sulla dimensione della riga nei file CSV (in precedenza la riga non doveva superare gli 8 MB).
  • Nell'esportazione dei dati in formato Parquet è stata implementata la supporto per gli hash (dizionari) e gli indici basati sul filtro di Bloom. È stato implementato il metodo di compressione DELTA_BINARY_PACKED, che consente di ridurre significativamente le dimensioni dei file Parquet.
  • Nell'interfaccia della riga di comando è stata aggiunta una modalità sicura, attivata tramite l'opzione '-safe' o il comando '.safe_mode'. In questa modalità è consentito l'accesso solo al file di database inizialmente specificato, e il tentativo di aprire altri file genererà un errore.
  • Nell'interfaccia della riga di comando è stato migliorato l'autocompletamento dell'input. Il codice per l'autocompletamento è stato tradotto per utilizzare il PEG (Parsing Expression Grammar).
  • Quando si eseguono comandi nell'interfaccia della riga di comando, è stato implementato un display visivo per i grandi numeri, ad esempio, quando si visualizza il numero 100000000, sarà inoltre indicato '(100 milioni)'.
  • In SQL è stata aggiunta la supporto per la sintassi in cui le abbreviazioni dei nomi delle tabelle e delle espressioni possono essere specificate prima dei valori a cui si riferiscono (anziché utilizzare la sintassi «espressione AS nome»): SELECT e1: some_long_and_winding_expression, e2: t2.a_column_name FROM t1: long_schema.some_long_table_name, t2: short_s.tbl;
  • Nel comando «SELECT» è stata implementata la supporto per l'operazione «RENAME» per rinominare i campi restituiti specificando l'espressione «*»: SELECT * RENAME (col1 AS new_col1) FROM integers;
  • Nel comando «SELECT» è consentito utilizzare le operazioni «LIKE» e «SIMILAR TO» quando si restituisce tramite «*»: SELECT * LIKE 'val%' FROM key_val;
  • Migliorata la qualità nella generazione di numeri pseudocasuali.
  • Ottimizzatore delle query modernizzato. Le prestazioni nel test TPC-H SF100 sono aumentate del 13%.
  • Proposto un nuovo API simile a C per lo sviluppo di estensioni, che può essere utilizzato, ad esempio, per creare nuove funzioni aggregate o di tabella.
  • Aggiunta la supporto per i sistemi con la libreria standard C Musl.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster