Publicado o DuckDB 0.6.0, uma variante do SQLite para consultas analíticas.

Está disponível a versão do SGBD DuckDB 0.6.0, que combina propriedades do SQLite, como compactação, capacidade de conexão como uma biblioteca embutida, armazenamento de banco de dados em um único arquivo e uma interface CLI amigável, com recursos e otimizações para executar consultas analíticas que cobrem uma parte significativa dos dados armazenados, como a agregação do conteúdo total de tabelas ou a fusão de várias tabelas grandes. O código do projeto é distribuído sob a licença MIT. O desenvolvimento ainda está em fase de formação de lançamentos experimentais, uma vez que o formato de armazenamento ainda não está estabilizado e muda de versão para versão.

No DuckDB, é fornecido um dialeto expandido da linguagem SQL, incluindo recursos adicionais para processar consultas muito complexas e de longa execução. Suporta o uso de tipos complexos (arrays, estruturas, uniões) e a capacidade de executar subconsultas correlacionadas arbitrárias e aninhadas. Permite a execução simultânea de várias consultas, a execução de consultas diretamente de arquivos nos formatos CSV e Parquet. Há a possibilidade de importação de SGBDs PostgreSQL.

Além do código de shell do SQLite, o projeto utiliza um parser separado da biblioteca PostgreSQL, o componente Date Math do MonetDB, sua própria implementação de funções de janelas (baseada no algoritmo Segment Tree Aggregation), um manipulador de expressões regulares baseado na biblioteca RE2, seu próprio otimizador de consultas, um mecanismo de controle de concorrência de múltiplas versões (Multi-Version Concurrency Control), bem como um motor de execução de consultas vetorizado baseado no algoritmo Hyper-Pipelining Query Execution, permitindo processar grandes conjuntos de valores em uma única operação.

Entre as mudanças na nova versão:

  • O trabalho na melhoria do formato de armazenamento foi continuado. Implementado um modo otimista de gravação em disco, onde ao carregar um grande conjunto de dados em uma única transação, os dados são compactados e gravados em fluxo em um arquivo com o banco de dados, sem aguardar a conclusão da confirmação da transação pelo comando COMMIT. Quando o comando COMMIT é recebido, os dados já estão gravados no disco, e ao executar ROLLBACK, são descartados. Anteriormente, os dados eram totalmente salvos na memória antes de serem gravados no disco durante o commit.
  • Adicionada a suporte à carga paralela de dados em tabelas separadas, permitindo um aumento significativo na velocidade de carregamento em sistemas multicore. Por exemplo, na versão anterior, o carregamento de um banco de dados com 150 milhões de linhas em um CPU de 10 núcleos levava 91 segundos, enquanto na nova versão essa operação é realizada em 17 segundos. Estão previstos dois modos de carga paralela — com a preservação da ordem das gravações e sem a preservação da ordem.
  • Para a compressão de dados, foi utilizado o algoritmo FSST (Fast Static Symbol Table), que permite empacotar dados dentro de strings utilizando um dicionário comum de coincidências típicas. A aplicação do novo algoritmo reduziu o tamanho do banco de dados de teste de 761MB para 251MB.
  • Para a compressão de números de ponto flutuante (DOUBLE e FLOAT), foram propostos os algoritmos Chimp e Patas. Em comparação com o algoritmo Gorillas anteriormente utilizado, o Chimp oferece um nível de compressão mais alto e descompactação mais rápida. O algoritmo Patas é inferior ao Chimp em termos de compressão, mas significativamente mais rápido na descompactação, cuja velocidade é quase indistinguível da leitura de dados não compactados.
  • Adicionada a capacidade experimental de carregar dados de arquivos CSV em vários fluxos paralelos (SET experimental_parallel_csv=true), o que reduz significativamente o tempo de carregamento de grandes arquivos CSV. Por exemplo, ao ativar a opção, o tempo de carregamento de um arquivo CSV de 720 MB foi reduzido de 3,5 para 0,6 segundos.
  • Implementada a capacidade de execução paralela de operações de criação e gerenciamento de índices. Por exemplo, a execução da operação CREATE INDEX para uma coluna com 16 milhões de registros foi reduzida de 5,92 para 1,38 segundos.
  • Garantida a paralelização de operações de agregação em consultas que contêm a expressão "COUNT(DISTINCT col)".
  • Adicionada ao SQL a suporte ao tipo UNION, permitindo a ligação de vários tipos a um único elemento (por exemplo, "UNION(num INT, error VARCHAR))").
  • O SQL agora permite a formação de consultas que começam com a palavra "FROM" em vez de "SELECT". Nesse caso, presume-se que a consulta começa com "SELECT *".
  • Adicionada ao SQL a suporte à expressão "COLUMNS", permitindo executar operações em várias colunas sem duplicar a expressão. Por exemplo, "SELECT MIN(COLUMNS(*)) from obs;" executará a função MIN para cada coluna na tabela obs, e "SELECT COLUMNS(‘val[0-9]+’) from obs;" para colunas com nomes consistindo de "val" e números.
  • Adicionada a suporte a operações em listas, por exemplo, "SELECT [x + 1 for x in [1, 2, 3]] AS l;".
  • Otimizada a utilização de memória. Por padrão, na plataforma Linux, a biblioteca jemalloc é utilizada para gerenciamento de memória. A performance das operações de junção de hashes foi significativamente aprimorada em tamanho de memória limitado.
  • Na interface de linha de comando, adicionado o modo de saída ".mode duckbox", que descarta colunas intermediárias levando em conta a largura da janela do terminal (ideal para uma avaliação rápida dos resultados de consultas com um grande número de colunas, como "SELECT * FROM tbl", que normalmente se quebram em várias linhas). Com o parâmetro ".maxrows X" é possível limitar ainda mais o número de linhas exibidas.
  • No CLI, completude automática de entrada foi implementada levando em consideração o contexto (completa a entrada de palavras-chave, nomes de tabelas, funções, nomes de colunas e nomes de arquivos).
  • No CLI, a exibição do indicador de progresso da execução da consulta está ativada por padrão.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster