DuckDB 0.6.0,发布了用于分析查询的 SQLite 变体

DuckDB 0.6.0 DBMS 版本已发布,它结合了 SQLite 的紧凑性、以嵌入式库的形式连接的能力、将数据库存储在一个文件中以及方便的 CLI 界面等属性,以及用于执行的工具和优化分析查询涵盖了存储数据的重要部分,例如聚合表的全部内容或合并多个大表。 该项目代码是根据 MIT 许可证分发的。 由于存储格式尚未稳定并且版本之间存在变化,开发仍处于形成实验版本的阶段。

DuckDB 提供了一种高级 SQL 方言,其中包括处理非常复杂且耗时的查询的附加功能。 支持使用复杂类型(数组、结构、联合)以及执行任意和嵌套关联子查询的能力。 它支持同时运行多个查询,直接从 CSV 和 Parquet 文件运行查询。 可以从 PostgreSQL DBMS 导入。

除了 SQLite 的 shell 代码之外,该项目还使用单独库中的 PostgreSQL 解析器、MonetDB 的 Date Math 组件、它自己的窗口函数实现(基于线段树聚合算法)、基于RE2库,它自己的查询优化器,以及任务同时执行的MVCC控制机制(多版本并发控制),以及基于超管道查询执行算法的矢量化查询执行引擎,允许大量值​​在一次操作中一次处理。

新版本的变化包括:

  • 存储格式的改进工作仍在继续。 实现了乐观磁盘写入模式,在一个事务中加载大量数据时,数据被压缩并以流式方式从数据库写入文件,而无需等待事务通过 COMMIT 命令确认。 当收到COMMIT命令时,数据已经写入磁盘,当执行ROLLBACK时,数据被丢弃。 以前,数据最初是完全保存到内存中的,提交后,又保存到磁盘上。
  • 添加了对将数据并行加载到单独表中的支持,这使您可以显着提高多核系统上的加载速度。 例如,在之前的版本中,在150核CPU上加载10亿行的数据库需要91秒,但在新版本中这个操作在17秒内完成。 有两种并行加载模式——保留记录顺序和不保留记录顺序。
  • 对于数据压缩,使用 FSST(快速静态符号表)算法,该算法允许您使用典型匹配的通用字典将数据打包到字符串中。 新算法的使用使得测试数据库的大小从 761MB 减少到 251MB。
  • Chimp 和 Patas 算法已被提出来压缩浮点数(DOUBLE 和 FLOAT)。 与之前的 Gorillas 算法相比,Chimp 提供了更高级别的压缩和更快的解压缩。 Patas算法在压缩比上落后于Chimp,但在解压速度上却快得多,与读取未压缩的数据几乎没有什么区别。
  • 添加了将 CSV 文件中的数据加载到多个并行流中的实验功能 (SET Experimental_parallel_csv=true),这显着减少了加载大型 CSV 文件所需的时间。 例如,启用此选项后,720 MB CSV 文件的下载时间从 3.5 秒减少到 0.6 秒。
  • 并行执行索引创建和管理操作的可能性已经实现。 例如,对具有 16 万条记录的列执行 CREATE INDEX 操作从 5.92 秒减少到 1.38 秒。
  • 在包含表达式“COUNT(DISTINCT col)”的查询中启用聚合操作的并行化。
  • SQL 添加了对 UNION 类型的支持,该类型允许将多种类型绑定到一个元素(例如,“UNION(num INT, error VARCHAR))”)。
  • SQL 提供了形成以单词“FROM”而不是“SELECT”开头的查询的能力。 在本例中,假设查询以“SELECT *”开头。
  • SQL 添加了对 COLUMNS 表达式的支持,它允许您对多个列执行操作,而无需重复表达式。 例如,“从 obs 中选择 MIN(COLUMNS(*));” 将导致对 obs 表中的每一列执行 MIN 函数,并且“SELECT COLUMNS('val[0-9]+') from obs;” 对于名称由“val”和数字组成的列。
  • 添加了对列表操作的支持,例如“SELECT [x + 1 for x in [1, 2, 3]] AS l;”。
  • 内存消耗已得到优化。 默认情况下,Linux平台使用jemalloc库进行内存管理。 内存有限时哈希合并操作的性能显着提高。
  • 命令行界面新增“.mode duckbox”输出模式,考虑到终端窗口的宽度,丢弃中间的列(适合快速直观地评估大量列的查询结果,例如“SELECT * FROM tbl”,在正常模式下分布在几行中)。 使用“.maxrows X”参数,您还可以限制显示的行数。
  • CLI 提供考虑上下文的​​输入自动完成功能(完成关键字、表名、函数、列名和文件名的输入)。
  • CLI 默认启用查询进度指示器。

来源: opennet.ru

添加评论