18.9k star!一个高性能的嵌入式分析型数据库,主要用于数据分析和数据处理任务

news2024/12/23 4:27:12

大家好,今天给大家分享的是一个开源的面向列的关系数据库管理系统(RDBMS)。

图片

DuckDB是一个嵌入式的分析型数据库,它提供了高性能的数据分析和数据处理能力。DuckDB的设计目标是为数据科学家、分析师和数据工程师提供一个快速、灵活且易于使用的数据分析工具。它支持SQL查询语言,并提供了一系列高级功能,如窗口函数、时间序列分析、地理空间数据处理等。

功能简介

DuckDB是一个高性能的嵌入式分析型数据库,主要用于数据分析和数据处理任务。以下是DuckDB的一些主要功能:

1.SQL查询:DuckDB支持标准的SQL查询语言,允许用户通过SELECT语句查询数据、使用JOIN操作连接表、使用WHERE子句过滤数据等。

2.数据类型支持:DuckDB支持多种数据类型,包括整数、浮点数、字符串、日期、时间、时间戳等。这使得用户可以处理各种类型的数据。

3.列式存储:DuckDB采用列式存储格式,能够高效地存储和检索大量数据。列式存储使得DuckDB在处理数据分析任务时具有更高的性能。

4.向量化执行引擎:DuckDB使用向量化执行引擎,可以高效地处理向量数据。这有助于提高查询性能,尤其是在处理大量数据时。

5.窗口函数:DuckDB支持窗口函数,允许用户在查询结果中对数据进行聚合,同时保留原始数据的行结构。窗口函数在数据分析中非常有用,例如计算累计和、移动平均等。

6.时间序列分析:DuckDB提供了时间序列分析功能,支持对时间序列数据进行操作,如按时间范围筛选数据、计算时间序列的统计指标等。

7.地理空间数据处理:DuckDB支持地理空间数据处理,允许用户查询和处理包含地理坐标的数据。这可以用于分析地理位置相关的数据,如距离计算、面积计算等。

8.并行计算和分布式计算:DuckDB支持并行计算和分布式计算,可以充分利用多核处理器和分布式系统的计算能力,提高查询性能。

9.多种编程语言支持:DuckDB提供了多种编程语言的API,如Python、R、Java等。这使得开发人员可以轻松地将DuckDB集成到他们的应用程序中,实现数据的快速分析和处理。

10.插件系统:DuckDB支持插件系统,允许用户扩展DuckDB的功能,以满足特定需求。

技术架构

图片

DuckDB 数据库可分为多个组件:Parser、Logical Planner、Optimizer、Physical Planner、Execution Engine、Transaction and Storage Managers。

1).Parser DuckDB SQL Parser 源自 Postgres SQL Parser。

2).Logical Planner 包含了两个过程 binder、plan generator。前者是解析所有引用的 schema 中的对象(如 table 或 view)的表达式,将其与列名和类型匹配。后者将 binder 生成的 AST 转换为由基本 logical query 查询运算符组成的树,就得到了一颗 type-resolved logical query plan。

3).Optimizer 优化器部分,会采用多种优化手段对 logical query plan 进行优化,最终生成 physical plan。例如,其内置一组 rewrite rules 来简化 expression tree,例如执行公共子表达式消除和常量折叠。针对表关联,会使用动态规划进行 join order 的优化,针对复杂的 join graph 会 fallback 到贪心算法会消除所有的 subquery。

4).Execution Engine DuckDB 最开始采用了基于 Pull-based 的 Vector Volcano 的执行引擎,后来切换到了 Push-based 的 pipelines 执行方法。DuckDB 采用了向量化计算来来加速计算,具有内部实现的多种类型的 vector 以及向量化的 operator。另外出于可移植性原因,没有采用 JIT,因为 JIT引擎依赖于大型编译器库(例如LLVM),具有额外的传递依赖。

5).Transactions DuckDB 通过 MVCC 提供了 ACID 的特性,实现了HyPer专门针对混合OLAP / OLTP系统定制的可串行化MVCC 变种 。该变种立即 in-place 更新数据,并将先前状态存储在单独的 undo buffer 中,以供并发事务和 abort 使用。

6).Persistent Storage DuckDB 使用面向读取优化的 DataBlocks 存储布局(单个文件)。逻辑表被水平分区为 chunks of columns,并使用轻量级压缩方法压缩成 physical block 。每个块都带有每列的min/max 索引,以便快速确定它们是否与查询相关。此外,每个块还带有每列的轻量级索引,可以进一步限制扫描的值数量。

项目优势

•简单的

SQLite 是世界上部署最广泛的 DBMS。安装简单、嵌入式进程内操作是其成功的关键。DuckDB 采用了这些简单和嵌入式操作的理念。

DuckDB 没有任何外部依赖,无论是编译时还是运行时。对于发布,DuckDB 的整个源代码树被编译成两个文件,一个头文件和一个实现文件,即所谓的“合并”。这大大简化了部署和集成到其他构建过程中的过程。对于构建,构建 DuckDB 所需的只是一个可用的 C++11 编译器。

•跨平台

由于没有依赖项,DuckDB 具有极高的可移植性。它可以针对所有主流操作系统(Linux、macOS、Windows)和 CPU 架构(x86、ARM)进行编译。它可以部署在从小型、资源受限的边缘设备到具有 100 多个 CPU 核心的大型多 TB 内存服务器中。使用DuckDB-Wasm,DuckDB 还可以在 Web 浏览器甚至手机上运行。

•功能丰富

DuckDB 提供严谨的数据管理功能。它拥有庞大的函数库、窗口函数等,广泛支持SQL 中的复杂查询。DuckDB通过我们定制的批量优化多版本并发控制 (MVCC)提供事务保证(ACID 属性) 。数据可以存储在持久的单文件数据库中。DuckDB 支持二级索引,以加快查找单个表条目的查询速度。

DuckDB与Python和R深度集成,可实现高效的交互式数据分析。

•高性能

DuckDB 包含一个列式矢量化查询执行引擎,其中查询仍被解释,但大量值(“矢量”)在一次操作中处理。这大大减少了传统系统(如 PostgreSQL、MySQL 或 SQLite)中存在的开销,这些系统按顺序处理每一行。矢量化查询执行可使 OLAP 查询的性能大大提高。

•可扩展

DuckDB 提供了灵活的扩展机制,允许定义新的数据类型、函数、文件格式和新的 SQL 语法。事实上,DuckDB 的许多关键功能(例如对Parquet 文件格式、JSON、时区的支持以及对HTTP(S) 和 S3 协议的支持)都是作为扩展实现的。扩展也可以在 DuckDB Wasm 中使用。

•开源免费

DuckDB是一个开源项目,用户可以自由地使用和修改其源代码。此外,DuckDB还提供了免费的社区版和商业版供用户选择。

•全面测试

DuckDB 的测试套件目前包含数百万个查询,包括改编自 SQLite、PostgreSQL 和 MonetDB 测试套件的查询。测试在各种平台和编译器上重复进行。每个拉取请求都会根据完整的测试设置进行检查,只有通过才会合并。

除了此测试套件之外,我们还运行各种测试,在高负载下对 DuckDB 进行压力测试。我们运行 TPC-H 和 TPC-DS 基准测试,并运行各种测试,其中许多客户端并行使用 DuckDB。

工程部署

查看官方部署指南[1]

图片

项目体验

•JAVA

安装

<dependency>    <groupId>org.duckdb</groupId>    <artifactId>duckdb_jdbc</artifactId>    <version>1.0.0</version></dependency>

示例

Class.forName("org.duckdb.DuckDBDriver");Connection conn = DriverManager.getConnection("jdbc:duckdb:");Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("SELECT 42");

•C++

安装

https://github.com/duckdb/duckdb/releases/download/v1.0.0/libduckdb-osx-universal.zip

示例

DuckDB db(nullptr);Connection con(db);auto result = con.Query("SELECT 42");result->Print();

•Go

安装

go get github.com/marcboeker/go-duckdb

示例

package main

import (
    "database/sql"
    "fmt"
    _ "github.com/marcboeker/go-duckdb"
)

func main() {
    db, _ := sql.Open("duckdb", "")

    db.Exec(`CREATE TABLE person (id INTEGER, name VARCHAR)`)
    db.Exec(`INSERT INTO person VALUES (42, 'John')`)

    var (
        id   int
        name string
    )
    row := db.QueryRow(`SELECT id, name FROM person`)
    _ = row.Scan(&id, &name)
    fmt.Println("id:", id, "name:", name)
}

•Nodejs

安装

npm install duckdb

示例

var duckdb = require('duckdb');var db = new duckdb.Database(':memory:'); // or a file name for a persistent DBdb.all('SELECT 42 AS fortytwo', function(err, res) {  if (err) {    console.warn(err);    return;  }  console.log(res[0].fortytwo)});

项目地址

https://github.com/duckdb/duckdb

References

[1] 官方部署指南: https://duckdb.org/docs/installation/?version=stable&environment=cli&platform=macos&download_method=package_manager

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1821887.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从路边摊到五星级酒店:六西格玛培训的价格与品质探秘!

当我们深入探讨市面上的六西格玛培训价格差异时&#xff0c;确实会发现不同机构之间存在着显著的差别。以张驰咨询和xx机构为例&#xff0c;两者在价格定位上形成了鲜明的对比&#xff0c;同时也展示了不同机构在教学理念和服务品质上的不同。 xx机构之所以能以亲民的价格吸引…

同三维T80005JEHVA 4K视频解码器

同三维T80005JEHVA视频解码器 可解1路4K30HDMI/VGA/CVBS1路3.5音频 可解电台音频网络流&#xff0c;可同时解4个网络流&#xff0c;分割输出 可预设十个流&#xff0c;任意切换1路流输出 <!--[endif]----><!--[if !vml]--> <!--![endif]----> 介绍&…

反贿赂管理体系认证:提升企业诚信与防范风险的双重利器

反贿赂管理体系认证在当今商业环境中发挥着至关重要的作用。这一认证不仅有助于提高企业的道德标准和社会责任感&#xff0c;还能有效防范商业风险&#xff0c;并提升内部管理水平和工作效率。 反贿赂管理体系认证要求企业制定和执行严格的反贿赂政策和程序&#xff0c;从而在…

优思学院|做质量没有前途?10年质量人想对大家说...

你是否也有过这样的困惑&#xff1f;做质量工作究竟有没有前途&#xff1f;是不是感觉每天都在重复一样的事情&#xff0c;看不到未来的希望&#xff1f; 今天&#xff0c;优思学院分享一个任职于五百强企业、有着10年经验的质量人、六西格玛黑带学生徐某的文章&#xff0c;和…

投资策略如何降低风险?WeTrade众汇一分钟分享

通过投资不同的公司、行业甚至国家&#xff0c;投资策略涉及多元化投资&#xff0c;投资者可以平衡潜在的收益与风险&#xff0c;这确实是降低风险的一种常见方法。下面WeTrade众汇分享一种更现代的投资策略&#xff0c;将指数中所有工具的资本化纳入考量&#xff0c;确保不遗漏…

cdh中的zookeeper怎么配置zoo.cfg

你手动改了zoo.cfg目录是不会生效的&#xff0c;因为是cdh在管控&#xff0c;所以只能通过cdh修改。 首先打开cdh。 xxx:7180 点击zookeeper 选配置&#xff0c;然后选高级 在右边找&#xff0c;有一个就是zoo.cfg&#xff0c;可以点击右边的感叹号。然后在里面编辑的就会直…

差分个人见解(一)

差分个人见解&#xff08;一&#xff09; 一维差分什么是差分构造差分数组差分数组的用处实战演练题目 一维差分 什么是差分 前缀和或许你已经了解了&#xff0c;差分其实就是前缀和的逆运算。 假设 a1 到 an 为 b1到 bn 的前缀和。 那么 b1 到 bn&#xff0c;分别就是 a1 到…

基于深度强化学习算法的火力-目标分配方法

源自&#xff1a;指挥控制与仿真 作者&#xff1a;李伟光 陈栋 注&#xff1a;若出现无法显示完全的情况&#xff0c;可 V 搜索“人工智能技术与咨询”查看完整文章 摘 要 针对火力-目标分配问题解空间较大、离散、非线性等特点,提出了一种基于DQN的深度强化学习算法,通过…

算法02 递归算法及其相关问题

递归 在编程中&#xff0c;我们把函数直接或者间接调用自身的过程叫做递归。 递归处理问题的过程是&#xff1a;通常把一个大型的复杂问题&#xff0c;转变成一个与原问题类似的&#xff0c;规模更小的问题来进行求解。 递归的三大要素 函数的参数。在用递归解决问题时&…

大模型赛道有前景吗?

前言 随着人工智能技术的飞速发展&#xff0c;大模型作为新一代AI技术的核心驱动力&#xff0c;正在全球范围内掀起一场科技革命。在这个浪潮中&#xff0c;大模型赛道以其巨大的发展潜力、广泛的应用前景&#xff0c;成为了众多企业和投资者关注的焦点。本文将从多个角度探讨…

VirtualHere 允许通过网络远程使用 USB 设备,就像本地连接一样!

传统上&#xff0c;USB 设备需要直接插入计算机才能使用。有了 VirtualHere&#xff0c;就不再需要这样做&#xff0c;网络本身就变成了传输 USB 信号的电缆&#xff08;也称为 USB over IP、USB/IP、USB over WiFi、USB over Ethernet、USB 设备服务器&#xff09;。 此 USB …

振弦采集仪在水利工程中的应用与效果评估

振弦采集仪在水利工程中的应用与效果评估 河北稳控科技振弦采集仪是一种用于测量和监测结构振动的设备&#xff0c;广泛应用于水利工程中。它能够实时监测结构的振动情况&#xff0c;帮助工程师评估结构的安全性和稳定性。 在水利工程中&#xff0c;振弦采集仪主要用于以下几个…

JS 中的各种距离 scrollTop?clientHeight?

元素的各种距离 DOM 对象 属性描述offsetWidth只读&#xff0c;返回元素的宽度&#xff08;包括元素宽度、内边距和边框&#xff0c;不包括外边距&#xff09;offsetHeight只读&#xff0c;返回元素的高度&#xff08;包括元素高度、内边距和边框&#xff0c;不包括外边距&am…

VS2019中添加FFTW3库 + cmake工程

一、FFTW3官网 http://www.fftw.org/install/windows.html 二、我这里是选的64位的版本&#xff0c;可根据自己的需要选择对应的版本 三、解压得到 四、根据官网的说明&#xff0c;需进行编译生成.lib文件 4.1 在解压目录打开cmd 4.2 生成 .lib 文件 终端依次输入 lib /machine…

解决:安装MySQL 5.7 的时候报错:unknown variable ‘mysqlx_port=0.0‘

目录 1. 背景2. 解决步骤 1. 背景 吐槽1&#xff0c;没被收购之前可以随便下载&#xff0c;现在下载要注册登录吐槽2&#xff0c;5.7安装到初始化数据库的时候就会报错&#xff0c;而8.x的可以一镜到底&#xff0c;一开始以为是国区的特色问题&#xff0c;google了一圈&#x…

动力学仿真平台:让模型配置与仿真测试更高效!

背景概述 动力学仿真平台是一种基于计算机技术的模拟工具&#xff0c;旨在模拟和分析物理系统中的动力学行为。通过建立数学模型&#xff0c;并借助高效的数值计算方法来模拟复杂系统的运动规律&#xff0c;为科研、设计、工程等领域提供重要的决策支持。动力学仿真平台的重要性…

Python高效处理海量气溶胶数据;MODIS和CALIPSO气溶胶数据下载、处理与反演分析

目录 专题一 碳中和下气溶胶的研究意义 专题二 夯实Python语言基础及代码讲解 专题三 MODIS气溶胶数据处理与反演分析 专题四 CALIPSO气溶胶数据处理及反演分析 专题五 总结与扩展 更多应用 在当前全球气候变化和环境污染问题日益突出的背景下&#xff0c;气溶胶研究显得…

Codeforces Round 950 G. Yasya and the Mysterious Tree 【树上异或和差分、01Trie】

G. Yasya and the Mysterious Tree 题意 给定一颗 n n n 个节点的树&#xff0c;每条边有一个初始的权值 现在定义两种操作&#xff1a; ^ y \; y y&#xff0c;给所有的边的权值异或上 y y y? u x u \; x ux&#xff0c;在树上任选一个不等于 u u u 的点&#xff0c;在…

用 Azure OpenAI 服务开发生成式 AI

简介 在当今迅速发展的技术环境中&#xff0c;生成式人工智能&#xff08;AI&#xff09;成为了众多企业创新和优化业务流程的重要工具。微软的 Azure OpenAI 服务为开发生成式 AI 解决方案提供了强大的平台和工具。本文将介绍如何利用 Azure OpenAI 服务开发生成式 AI 解决方…

Flink作业执行之 2.算子 StreamOperator

Flink作业执行之 2.算子 StreamOperator 前文介绍了Transformation创建过程&#xff0c;大多数情况下通过UDF完成DataStream转换中&#xff0c;生成的Transformation实例中&#xff0c;核心逻辑是封装了SimpleOperatorFactory实例。 UDF场景下&#xff0c;DataStream到Transf…