大家好,今天给大家分享的是一个开源的面向列的关系数据库管理系统(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 DB
db.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

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

  1. 回首2018 | 分析型数据库AnalyticDB: 不忘初心 砥砺前行

    题记 分析型数据库AnalyticDB(下文简称ADB),是阿里巴巴自主研发.唯一经过超大规模以及核心业务验证的PB级实时数据仓库.截止目前,现有外部支撑客户既包括传统的大中型企业和政府机构,也包括众 ...

  2. 悠星网络基于阿里云分析型数据库PostgreSQL版的数据实践

    说到“大数据”,当下这个词很火,各行各业涉及到数据的,目前都在提大数据,提数据仓库,数据挖掘或者机器学习,但同时另外一个热门的名词也很火,那就是“云”.越来越多的企业都在搭建属于自己的云平台,也有一些 ...

  3. 阿里下一代云分析型数据库AnalyticDB入选Forrester云化数仓象限

    前言 近期, 全球权威IT咨询机构Forrester发布"The Forrester Wave: CloudData Warehouse Q4 2018"研究报告,阿里巴巴分析型数 ...

  4. 阿里巴巴下一代云分析型数据库AnalyticDB入选Forrester Wave™ 云数仓评估报告 解读

    前言近期, 全球权威IT咨询机构Forrester发布"The Forrester WaveTM: CloudData Warehouse Q4 2018"研究报告,阿里巴巴分析型 ...

  5. AnalyticDB - 分析型数据库

    https://yq.aliyun.com/teams/31?spm=5176.7937365.1120968.ee1.78505692UL9DhG 分析型数据库(AnalyticDB)是一种高并发低 ...

  6. 什么是分析型数据库PostgreSQL版

    分析型数据库PostgreSQL版(原HybridDB for PostgreSQL)为您提供简单.快速.经济高效的 PB 级云端数据仓库解决方案.分析型数据库PostgreSQL版 兼容 Green ...

  7. amazon redshift 分析型数据库特点——本质还是列存储

    Amazon Redshift 是一种快速且完全托管的 PB 级数据仓库,使您可以使用现有的商业智能工具经济高效地轻松分析您的所有数据.从最低 0.25 USD 每小时 (不承担任何义务) 直到每年每 ...

  8. 更强大的实时数仓构建能力!分析型数据库PostgreSQL 6.0新特性解读

    阿里云 AnalyticDB for PostgreSQL 为采用MPP架构的分布式集群数据库,完备支持SQL 2003,部分兼容Oracle语法,支持PL/SQL存储过程,触发器,支持标准数据库事务 ...

  9. SAP S/4嵌入式分析——虚拟数据模型(VDM)

    在本文中,我会通过CDS视图来介绍虚拟数据模型(Virtual Data Model,以下简称VDM). 在SAP HANA平台出现后,SAP的业务应用开发模式已经产生了变化,新的经验法则是:尽可能在 ...

  10. Beanstalkd 一个高性能分布式内存队列系统

    需要一个分布式内存队列,能支持这些特性:任务不重不漏的分发给消费者(最基础的).分布式多点部署.任务持久化.批量处理.错误重试..... 转载:http://rdc.taobao.com/blog/c ...

随机推荐

  1. CNCF 沙箱项目 OCM Placement 多集群调度指南

    ​简介:在这篇文章中,将介绍 Placement 如何选择到所需的集群,Placement 可以提供的调度功能,以及一些场景下的最佳实践,使用者可以参考示例来编写符合自己要求的 Placement.其 ...

  2. 五福背后的 Web 3D 引擎 Oasis Engine 正式开源

    简介: Oasis 从开源走向新的起点,用 3D 化的交互和表达让世界变得更美好. 相信大家已经体验了今年支付宝五福的活动,无论是今年的五福首页还是打年兽游戏都是由蚂蚁互动图形引擎(代号:Oasis ...

  3. 快手基于RocketMQ的在线消息系统建设实践

    简介: 快手需要建设一个主要面向在线业务的消息系统作为 Kafka 的补充,低延迟.高并发.高可用.高可靠的分布式消息中间件 RocketMQ 正是我们所需的. 作者:黄理 黄理,10多年软件开发和架 ...

  4. 埃森哲携手阿里云,采用K8s容器云服务为客户提供无限弹性

    简介: 埃森哲作为全球领先的专业服务公司,在数字化.云计算等领域拥有全球领先的能力,我们在多年的实际客户项目中,找到并沉淀出了适合企业数字化转型的方法论,积累了丰富的落地经验. 作者:姚迪.周警伟 随 ...

  5. 每天5分钟复习OpenStack(十三)存储缓存技术Bcache

    Ceph作为一个分布式存储,在项目中常见的形态有两者,一种是采用 SSD 或NVME 磁盘做Ceph的日志盘,使用SATA磁盘来做数据盘.这样的好处是比较经济实惠.另一种则是全部采用 SSD 或NVM ...

  6. CSS:鼠标移动到图片上的动画

    CSS:鼠标移动到图片上的动画 .pic img { width: 100%; left: 0; top: 0; right: 0; bottom: 0; margin: auto; transiti ...

  7. 【转载】只有.dbf数据文件进行数据库恢复

    此篇文章为转载,来自 " ITPUB博客 " ,链接:http://blog.itpub.net/26015009/viewspace-714742/ 个人mark下,在之后dbf ...

  8. 如何使用go module导入本地包

    go module是Go1.11版本之后官方推出的版本管理工具,并且从Go1.13版本开始,go module将是Go语言默认的依赖管理工具. 到今天Go1.14版本推出之后Go modules 功能 ...

  9. gin-vue-admin开发教程 02 了解项目目录结构和代码执行的流程

    学习目标: 介绍项目 项目目录(2.0) 后台的启动过程 前台的启动过程 前后台交互的流程 视频学习地址: https://www.bilibili.com/video/BV1Rz4y1X7Zr (海 ...

  10. MinDoc 编译安装(linux环境)

    目录 MinDoc 简介 项目地址: 下面以 Linux 系统为例: Gomod方式安装 下载项目代码到本地 写入依赖 下载依赖 创建数据库 配置数据库 编译main.go 提升文件权限 初使化数据库 ...