DuckDB 是一个开源的、嵌入式的、分析型的高性能的 SQL 数据库管理系统。

DuckDB的特点

  1. 嵌入式:与传统的数据库(如 PostgreSQL, MySQL, Oracle)需要作为独立的服务器进程运行不同,DuckDB 可以直接运行在应用程序的进程内部。这使得它非常容易集成和部署,没有独立的服务器需要安装、配置或管理。它有点像 SQLite(SQLite 是嵌入式的事务型数据库)。
  2. 分析型:DuckDB 专门设计用于处理分析型工作负载(OLAP - Online Analytical Processing)。这意味着它擅长执行复杂查询,如聚合(SUM, AVG, COUNT)、分组(GROUP BY)、连接(JOIN)大型数据集以及扫描大量行和列。它不适合高频率的、单行数据的事务处理(OLTP - Online Transactional Processing),比如网站后端频繁的读写操作。
  3. 列式存储:为了优化分析查询的性能,DuckDB 采用列式存储。传统数据库通常按行存储数据,而列式数据库按列存储数据。对于分析查询来说,通常只需要读取少数几列的数据,列式存储可以极大地减少 I/O,提高查询速度。
  4. 无服务器:由于是嵌入式的,因此无需搭建和维护数据库服务器。只需要在你使用的编程语言(如 Python, R, Java, C++ 等)中引入 DuckDB 库即可。
  5. 易于使用:它的 API 通常非常直观,并且支持标准的 SQL 查询语言,对于熟悉 SQL 的用户来说学习曲线很低。它特别在数据科学领域非常受欢迎,因为它能与 Pandas DataFrames、Apache Parquet 文件等数据源无缝集成。

DuckDB的应用场景:

  1. 数据分析:DuckDB 可以作为数据分析工具,用于快速查询和分析数据。
  2. 数据仓库:由于其高性能和 SQL 兼容性,DuckDB 可以用作轻量级数据仓库。
  3. 嵌入式数据库:DuckDB 可以嵌入到应用程序中,提供本地数据库功能,无需额外配置。
  4. 数据科学:数据科学家可以使用 DuckDB 来处理和分析数据,尤其是在需要 SQL 查询能力的情况下。
  5. IoT 和实时数据处理:DuckDB 可以用于处理和分析来自物联网设备的数据。
  6. 日志分析:对于需要快速查询和分析日志数据的应用,DuckDB 提供了一个高效的解决方案。

DuckDB安装教程

python环境下直接通过pip下载安装

pip install duckdb

DuckDB示例

import duckdb
import pandas as pd
import time
import os
import numpy as np

def parallel_processing_example():
    """并行处理演示"""
    print("=== 并行处理演示 ===")

    # 创建大数据集
    rows = 1_000_000 # 100万行
    print(f"创建包含{rows}行的数据集...")

    # 确保目录存在
    os.makedirs('./sample_data', exist_ok=True)

    # 生成大数据集
    big_df = pd.DataFrame({
        'id': np.arange(1, rows+1),
        'value1': np.random.rand(rows),
        'value2': np.random.rand(rows),
        'category': np.random.choice(['A', 'B', 'C', 'D'], size=rows)
    })

    # 大约46MB
    # 保存为CSV (可选,注释掉以提高执行速度)
    big_df.to_csv('./sample_data/large_dataset.csv', index=False)

    # 创建DuckDB连接,内存模式
    con = duckdb.connect(':memory:')

    # 在DuckDB中注册DataFrame
    con.register('big_data', big_df)

    # 运行并行聚合查询并计时
    print("\n执行复杂聚合查询...")
    start_time = time.time()

    # STDDEV 标准差
    result = con.execute("""
        SELECT
            category,
            COUNT(*) as count,
            AVG(value1) as avg_value1,
            SUM(value2) as sum_value2,
            MIN(value1) as min_value1,
            MAX(value2) as max_value2,
            STDDEV(value1) as stddev_value1
        FROM big_data
        GROUP BY category
        ORDER BY category
    """).fetchdf()

    end_time = time.time()
    elapsed = end_time - start_time

    print(f"查询执行时间: {elapsed:.4f} 秒")
    print("\n聚合结果:")
    print(result)

    return con

运行结果
在这里插入图片描述

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐