慣性聚合 高效追讀感興趣之博客、新聞、科技資訊
閱原文 以慣性聚合開啟

推薦訂閱源

博客园 - 司徒正美
V
V2EX
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队
aimingoo的专栏
aimingoo的专栏
Apple Machine Learning Research
Apple Machine Learning Research
IT之家
IT之家
Blog — PlanetScale
Blog — PlanetScale
A
About on SuperTechFans
月光博客
月光博客
T
The Blog of Author Tim Ferriss
宝玉的分享
宝玉的分享
Martin Fowler
Martin Fowler
博客园 - 聂微东
The GitHub Blog
The GitHub Blog
V
Visual Studio Blog
WordPress大学
WordPress大学
酷 壳 – CoolShell
酷 壳 – CoolShell
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python)
单节点数据工程:DuckDB、DataFusion、Polars及LakeSail
Alex Merced · 2026-05-24 · via DEV Community

曩十载间,数据工程与分布式集群浑然一体。若数据集逾数吉字节,则常规之道必于AWS EMR或Databricks上启Apache Spark之集群。此分布式范式,遂引巨量运维之繁复:调校JVM之配置,分配执行者,细调shuffle之分区,复需支付甚巨之“序列化之税”,以迁数据于网络套接字与语言运行时之间。

近者,数据工程之境,独木复兴。非扩而至于群集,乃升而于单机。今之笔记本电脑,多具十二核以上之CPU,迅捷之NVMe SSD,可速读数吉每秒,乃至百二十八GB之RAM。云供者,以百核千兆之虚拟机,价不及Kubernetes或Spark群集之什一。

此物理之变,仅半其事耳。其真之触媒,乃基于 Apache Arrow、向量化执行、及离核内存管理之新世代数据技术。如 DuckDB、Apache Arrow DataFusion、Polars、LakeSail 等器,使一单笔记本电脑或虚拟机,可处理数百吉字节乃至太字节之数据。今可于本地或单节点执行繁复之分析管道,而无分布式 JVM 运行时之冗余。

Architecture diagram showing the single-node data engineering ecosystem from local laptops to single-node engines querying S3

核心基石:柱状内存与 Apache Arrow

欲知单节点数据工程何以处理昔需百集群节点方能成之数据集,必察数据于内存中结构之状。

旧式数据库及处理运行时,为应事务工作负载(OLTP)而设,皆用行向布局。其于内存中,将单条记录之诸字段连续存储:[User_ID, Age, Name]者,继而录次之。当施析理之问(OLAP),若仅针对列之少(如计用户之平均年岁),行向引擎必遍索记忆中全录之构。此程载不相关之数据(如名与号)入CPU之L1/L2缓存,致缓存蒙尘,内存频宽徒耗。

竖表查询引擎,以列式存储数据,连续存取,此弊得解。[Age, Age, Age]于一缓冲区中,且[Name, Name, Name]他处亦然。CPU唯读查询所需之列。

Row-Oriented Layout (OLTP):
┌──────────────────────────────┬──────────────────────────────┐
│ ID 1 │ Age 1 │ Name 1        │ ID 2 │ Age 2 │ Name 2        │
└──────────────────────────────┴──────────────────────────────┘

Columnar Layout (Arrow/OLAP):
┌──────────┬──────────┐ ┌──────────┬──────────┐ ┌──────────┬──────────┐
│ ID 1     │ ID 2     │ │ Age 1    │ Age 2    │ │ Name 1   │ Name 2   │
└──────────┴──────────┘ └──────────┴──────────┘ └──────────┴──────────┘

入全景模式 出全屏模式

Apache Arrow一统列式内存之布局。其立开源、无语言之规,以应内存列式之数据。因定共通之内存格式,Arrow除历史所滞之数据管道序列之税。

古之架构,欲通 Python 脚本与 Java 或 C++ 引擎之数据,必先将数据序列化为字节流(如 JSON 或 Protobuf),复在彼端反序列化之。此序列化之费,常占查询执行时之八成。

箭矢使进程间通信(IPC)无需复制。箭矢于内存中表数据,于Python、Rust、C++皆同,故异进程可内存映射(mmap)同物理内存缓冲。引擎可藉交换内存指针,将数据集传于Python以供机器学习或可视化。未尝有字节之复制,亦无序列化之事。

复次,Arrow之连续内存对齐,合乎今时CPU缓存行之布局,故运用单指令多数据(SIMD)指令集(如Intel/AMD之AVX-512或ARM之Neon)自当顺遂。SIMD使CPU得以于一时钟周期内,将一指令(如滤较或算加)施于数据点之矢。此硬件级之并行,化数据处理之内存或CPU所限为直运于处理器之高效作业。

Comparison diagram showing the row-based layout versus Apache Arrow's columnar in-memory format and zero-serialization pointer exchange

过程内SQL巨擘:DuckDB架构&特性

DuckDB已为单节点SQL分析之标准数据库引擎。其设计为进程内分析数据库,直运行于主进程(如Python解释器或CLI二进制文件)内,而非独立服务器守护进程。此消弭了PostgreSQL或Snowflake等客户端-服务器数据库之网络套接字延迟及IPC开销。

DuckDB之执行引擎,采向量化查询执行之模。非逐行处理数据(此乃火山迭代模型),亦非一次性处理整列(此易致L1/L2缓存溢出于大表),DuckDB乃以小而缓存友好之向量处理数据。此向量通常含2048元素。

Volcano Model:       [Row 1] ──► [Operator] ──► [Row 2] ──► [Operator]
Column-at-a-time:    [Entire Column (10M rows)] ──► [Operator] (Overflows Cache)
Vectorized Model:    [Vector of 2048 rows] ──► [L1/L2 CPU Cache] ──► [Operator]

Enter fullscreen mode Exit fullscreen mode

将此诸矢维持其小,俟得入CPU之L1/L2缓存,则DuckDB可极减内存频带之阻。CPU乃以SIMD之指令施诸矢,使执行之脉管常盈数据。

欲应数据集逾物理内存之需,DuckDB施以离核执行。当内存耗至用户所定之限,DuckDB之缓冲管理器自将中段查询状态(如哈希联接表、排序缓冲、或聚合状态)溢出至暂存磁盘文件。此溢出机制,乃以块式缓冲池为基础,使数据页错误至磁盘,令汝得以于数据集远超系统内存之境运行查询。

最新v1.5.3版本(二零二六年五月),DuckDB增数项之新,扩其单节点之用:

  • 呱呱远程协议:DuckDB今附核心之延,行呱呱之协议。此协议使用户得于需时,使DuckDB行于客主之构,便远附与远询之调,而不失引擎之简。
  • 生境與格式更新: 冰山擴充已升級,支援MERGE INTO之操作,使能於本地DuckDB會話中直據冰山表施以複雜之Delta更新。
  • 亞馬遜安全與IRSA: IRSA(为服务账户提供 IAM 角色的原生支持)已加入,于容器化单节点管道中运行 DuckDB 时,可简化安全 S3 访问。
  • 静态链接: 该分发版现于 Linux 平台静态链接 jemalloc,提升内存分配速度,并减少重载时碎片化。

下文之Python脚本,示以配置DuckDB之内存限额,以新AWS扩展功能注册S3凭证,并运行溢写至磁盘之查询:

import duckdb

# Initialize DuckDB connection
con = duckdb.connect(database='local_cache.db')

# Set memory limit to force out-of-core spilling on smaller datasets
con.execute("SET max_memory='8GB';")
con.execute("SET temp_directory='./duckdb_temp';")

# Load S3 and AWS extensions (built-in in v1.5.3)
con.execute("INSTALL aws;")
con.execute("LOAD aws;")

# Autodetect AWS credentials from environment (supports IRSA)
con.execute("CALL load_aws_credentials();")

# Query a large Parquet dataset directly on S3 with predicate pushdown
# DuckDB only downloads the columns and row groups that match the filter
query = """
    SELECT 
        user_id, 
        COUNT(event_id) as event_count,
        AVG(session_duration) as avg_duration
    FROM read_parquet('s3://my-lakehouse/bronze/events/**/*.parquet')
    WHERE event_date >= '2026-01-01'
    GROUP BY user_id
    HAVING event_count > 1000
    ORDER BY avg_duration DESC
"""

# Execute and stream results
result = con.execute(query).fetchdf()
print(result.head())

全屏模式开启 全屏模式关闭

DuckDB兼具SQL支持、向量化性能与离线稳定性,为本地分析任务之核心利器。

DuckDB vectorized execution architecture showing chunked vector pipelines inside CPU cache and out-of-core spilling to SSD temp files

可扩展之 Rust 处理:Apache Arrow DataFusion

DuckDB 乃分析数据库,而 Apache Arrow DataFusion 乃可扩展之查询引擎框架也。以 Rust 为文,以 Apache Arrow 为其本内存格式,DataFusion 广泛用于构建他数据库、查询引擎及定制数据平台(如 Bauplan、Spice.ai、LakeSail)。

DataFusion之设计,乃模块之制。其解构查询之谋、优化之阶、执行之序。若尔欲建定制之数据器,可注册定制之目录,撰用户自定之逻辑优化则(如定制之谓词下推),或接定制之物理执行节点。

欲求线程并行,DataFusion乃用 Rust 之异步 Tokio 运行时。非固系执行于定数之线程,DataFusion 乃分物理计划碎片(以异步 Arrow RecordBatch 流表之)于 Tokio 工作线程池。此使引擎得适于多核架构,避重 I/O 负荷下线程争竞之患。

近岁v53.x、v54.x之版,DataFusion社群增数优化:

  • 日期谓词预像: DataFusion今优化含日期函数之问(如date_trunc等),然未竟。date_part者,审其数理之"逆象"也。非于每行施以时序之术,优者改写其滤限于原分域之界,遂得分域之精简。
  • 排序下推阶段二:今引擎先以物理统计排序文件组,而后行排序之令。若一集Parquet文件含非重叠之排序区间,DataFusion则省却全局排序合并之步,遂减规划与CPU执行之时。
  • 无空值反连接已优化对空值抗连接的支持,此情形常见于SQL查询中。NOT IN条款。
  • 变体类型整合: 规划者已引入对二进制VARIANT格式的初步支持,为格式无关的半结构化数据查询奠定基础。

下列 Rust 代码片段演示如何初始化 DataFusion 上下文,注册内存中的 Arrow 表,并编程执行查询:

use datafusion::prelude::*;
use datafusion::arrow::record_batch::RecordBatch;
use datafusion::arrow::schema::{DataType, Field, Schema};
use datafusion::arrow::array::{Int32Array, StringArray};
use std::sync::Arc;

#[tokio::main]
async fn main() -> datafusion::error::Result<()> {
    // Create a local execution context
    let ctx = SessionContext::new();

    // Define a simple schema
    let schema = Arc::new(Schema::new(vec![
        Field::new("id", DataType::Int32, false),
        Field::new("name", DataType::Utf8, false),
    ]));

    // Create Arrow arrays
    let id_array = Int32Array::from(vec![1, 2, 3, 4, 5]);
    let name_array = StringArray::from(vec!["Alice", "Bob", "Charlie", "David", "Eve"]);

    // Build the record batch
    let batch = RecordBatch::try_new(
        schema.clone(),
        vec![Arc::new(id_array), Arc::new(name_array)],
    )?;

    // Register the record batch as an in-memory table
    ctx.register_batch("users", batch)?;

    // Execute SQL query
    let df = ctx.sql("SELECT name FROM users WHERE id > 2").await?;

    // Print the physical execution plan
    df.show().await?;

    Ok(())
}

进入全屏模式 退出全屏模式

此库优先模式,使DataFusion成为构建专业高性能数据系统之首选

DataFusion extensible Rust architecture showing SQL/DataFrame inputs compiled into physical plans running on Arrow memory, with pluggable catalogs and custom execution nodes

向量化DataFrame:Polars Eager & 懒惰管道

夫以 Python、Rust 或 JavaScript 为业者,DataFrame 乃其处理数据之首选 API。虽 Pandas 久为 Python 之标准,然其单线程,内存占用甚巨(常需五至十倍于数据集之 RAM),且不支查询优化。

Polars者,乃 Rust 之原生、Arrow 之支撑之 DataFrame 之庖厨也,意欲代 Pandas。其优化于多核之执行,用特制之窃取工作之 CPU 调度器,分执行之块于可用之核。

Polars 提供二种执行之模式:

  1. 急切之 API: 立即执行操作,按步进行,仿若 Pandas 之行为。此模式于 Jupyter Notebooks 中交互调试甚为有益。
  2. 惰性 API: 构建逻辑有向无环图(Directed Acyclic Graph, DAG),以表管道。当调用 .collect() 时,Polars 将 DAG 递予查询优化器。优化器施以数则规则:
    • 投影下推: 仅读取查询中明确引用之列。
    • 命谓下推: 将过滤操作尽可能移近存储层(推入Parquet读取器)。
    • 公共子表达式消除: 识别重复计算,执行一次。
Eager: Load File (All Columns) ──► Filter Rows ──► Select Columns
Lazy:  Query Planner ──► Push Filter & Select Into File Reader ──► Load File (Filtered & Pruned)

进入全屏模式 退出全屏模式

二零二六年,极光之师正式稳定其流式执行之机。此机可于超乎物理内存之数据集上,行内存外DataFrame之执行。流式之机今支持:

  • 流式合并与截至连接:适于时序对齐(如合并金融逐笔数据或物联网传感器指标)。
  • 流式聚合: 繁复之統計計算(含偏態、峰態及熵)今可於流動模式行之。
  • 直達雲端匯流: Polars可直將資料流回儲存格式,如Delta Lake(sink_delta)與Apache Iceberg(sink_iceberg),無需實化中間表格。

欲启流引擎,开发者设 Polars 以用流执行径。

import polars as pl

# Enable streaming engine affinity globally
pl.Config.set_engine_affinity("streaming")

# Define a Lazy pipeline querying a folder of compressed CSVs
lazy_query = (
    pl.scan_csv("./data/raw_metrics/*.csv")
    .filter(pl.col("metric_type") == "cpu_utilization")
    .with_columns(
        (pl.col("metric_value") * 100).alias("percentage")
    )
    .group_by(["host_id", "timestamp"])
    .agg([
        pl.col("percentage").mean().alias("mean_cpu"),
        pl.col("percentage").skew().alias("skew_cpu") # Uses new streaming aggregations
    ])
    .sort("mean_cpu", descending=True)
)

# Execute the query out-of-core using the streaming engine
# This will process files in batches, avoiding Out-Of-Memory (OOM) crashes
result_df = lazy_query.collect(streaming=True)
print(result_df.head())

入全景模式 出全屏模式

Polars之融合表意DataFrame之API、惰性查询之优化、流式处理之稳定,遂成Python与Rust开发者之强引擎。

Polars query planning diagram showing Eager sequential execution vs Lazy DAG optimization pathways with projection and predicate pushdowns

比较之论:评单节点引擎

择器之道,在审其构异,察其API之要。

Comparative Analysis: Evaluating Single-Node Engines

需审度之要权衡

  • API之选:若君之团队撰标准SQL,则DuckDB为自然之始。若君撰程序代码,则Polars之表达式语言较SQL更富表现,且易并行。
  • 可延展性抑或即用之便: 鸭数据库与波拉斯乃全然面向用户之应用。数据融合则为一引擎之框架。若尔欲构建定制数据库,或需更易物理查询执行层之运作,则当用数据融合。
  • 内存足迹: DataFusion与Polars于内存操作,其内存占用较DuckDB为轻,此盖因Rust之内存管理模型,且直映Arrow结构。然DuckDB之缓冲管理,于需巨量磁盘溢出之繁复查询,则更为成熟。

零JVM Spark:LakeSail之高性能管道

既有数据代码库之团队,采行单节点工具之主要障碍,乃旧式API之遗痕。多组织有数千行PySpark所撰之Apache Spark代码。改写此等管道为DuckDB SQL或Polars DataFrames,费工甚巨,且引致验证之风险。

古之运行PySpark于本地,必设一Spark集群。此集群运行于Java虚拟机(JVM),遂致配置繁复,内存开销甚巨。寻常本地Spark会话,仅启即耗四GB内存,纵处理百MB之CSV文件亦然。

复次,PySpark乃借Py4J之关隘桥通。当汝之PySpark码呼Python用户定义之函数(UDF),其数据必先序列化,自JVM送至Python工作进程,经其处理,复序列化,再送回JVM。此跨进程序列化之税,致Spark中PythonUDF之执行迟缓。

Traditional PySpark UDF Path:
[JVM Executor] ──(Serialize via Py4J)──► [Python Worker] ──► [Run UDF] ──(Serialize)──► [JVM Executor]

入全景模式 出全屏模式

湖帆(其开源版本Sail引擎)解此之限。Sail乃纯Rust、无JVM之计算引擎,设为Apache Spark之即插即用替代品。其行Spark Connect协议,使既有PySpark及Spark SQL应用,不须改易,仅连Sail服务器于gRPC即可运行。

LakeSail PySpark Connect Path:
[PySpark Session] ──(Spark Connect gRPC Logical Plan)──► [LakeSail Rust Server] ──► [DataFusion Physical Execution]

入全屏模式 出全屏模式

引擎之下,Sail易Spark之JVM Catalyst优化器及Tungsten执行引擎为Apache DataFusion与Apache Arrow。此架构有数利:

  • 零JVM开销:Sail启于毫秒,有可忽之闲内存之迹。可于小单核VM或本地 laptops 运行Spark之码。
  • 零拷贝Python UDF执行: 船帆将 Python 解释器直接嵌入其 Rust 二进制文件,以 PyO3 为之。执行 Python UDF 时,船帆将 Arrow 内存缓冲区的指针直接传递予 Python 解释器。UDF 在进程中执行,无需序列化,消弭了跨进程 Py4J 的瓶颈。
  • 原生开放格式:Sail 乃具 Rust 之基,以支 Delta Lake、Apache Iceberg 及 Parquet,直合 AWS Glue、Unity Catalog、Polaris REST Catalog.

欲使 PySpark 之管于本地 Sail 会中行,则装其包,而指会建者于本地 Sail gRPC 之港:

# Install pysail and PySpark client supporting Spark Connect
pip install pysail pyspark

入全屏模态 出全屏模态

于尔之终端,启帆之服务器:

# Start local Sail gRPC server on port 50051
sail spark server --port 50051

入全景模式 出全景模式

于尔之Python代码,以标准远程连接字符串,连结SparkSession至本地帆之服务器:

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, udf
from pyspark.sql.types import IntegerType

# Connect to the local Sail Rust-native server over Spark Connect protocol
spark = SparkSession.builder \
    .remote("sc://localhost:50051") \
    .getOrCreate()

# Load a local Parquet dataset using standard Spark DataFrame API
df = spark.read.parquet("./data/raw_orders")

# Define a standard Python UDF
@udf(returnType=IntegerType())
def calculate_tax(amount):
    # This runs in-process via Sail's PyO3 integration
    # Zero serialization tax is paid between Rust and Python
    return int(amount * 0.08)

# Execute transformations and show results
processed_df = df.filter(col("status") == "COMPLETED") \
                 .withColumn("tax", calculate_tax(col("total_amount")))

processed_df.show()

入全景模式 出全景模式

湖帆(LakeSail)存其Spark API之表,易其执行之机,使众得易其旧PySpark之管,而独于一节点行之,无JVM之累.

LakeSail Spark Connect architecture showing PySpark client communicating over gRPC to a Rust-native Spark Connect server with DataFusion and PyO3 embedded UDF zero-copy memory buffers

规模之阈:独节点破乎何时?

虽单节点数据工程可扩机器独力所处理之数据之量,然非灵丹妙药。及至某境,物理资源之限,使单节点之构不切实际。

主要瓶颈在于I/O。于内存外执行时,将数据溢出至磁盘,则瓶颈自内存容量移至磁盘读写带宽。纵使于高速NVMe SSD,亦需时以读写数百吉字节之中间连接表或排序缓冲,此致延迟。若查询于磁盘读取写入临时块所耗时,较之CPU周期执行所耗时为多,则系统为I/O所限。

次隘,在於詢問規劃與CPU執行之擴展。若汝之詢問必須掃視多TB之資料,即使用於64核之向量化引擎,亦需數分鐘方克完成掃視。若汝之商業SLA要求毫秒級或秒級之詢問延遲,則需並行分佈掃視與處理之工作於多機器之上。

第三之隘,在组织之并。若一虚拟机承吾分析之库,而数百之析理者或BI之仪表盘同时询之,则CPU之核将受线程之饥,锁之争将缓众人之时。

欲导尔架构之变,可循此操作之决:

To guide your architectural transitions, use the following operational decision framework

Performance-cost threshold graph showing single-node vs MPP execution efficiency zones based on data scale

MPP之境:渐展于Spark、Dremio、Bauplan、SpiceAI及MotherDuck

若数据之广、迟滞之求、并作之需逾越单节点之限,则必迁于分布式MPP(并行巨量处理)之构。今之MPP之境,其途有数,视作业之式而定.

MotherDuck(双行)

欲将 DuckDB 之劳作扩于云上,而无需管理设施者,MotherDuck 提供基于 DuckDB 之无服务器平台。

MotherDuck 之核心架构模式为 双重执行。(昔称混合执行)。汝提交查询时,MotherDuck之查询规划者,审数据集之所在。其分查询之谋:于汝之笔记本电脑CPU,以本地缓存之数据,本地执行查询之部分;于MotherDuck之云端计算节点,执行其他部分(若云端所驻之Parquet或Iceberg表格)。引擎以特制之“桥”运算符,动态联结此流。

二零二六年早,MotherDuck增原生日语。PostgreSQL线协议端点此使 BI 工具与旧式应用得直连 MotherDuck,用标准 PostgreSQL 驱动,无复需于客机安装 DuckDB 运行时。复有 MotherDuck 之特色焉。脉动(无服务器)计费以一秒为增,而雁湖之融合以扩容至京字节之境.

MotherDuck Dual Execution model showing how queries are split by a Hybrid Planner between local laptop CPUs and MotherDuck Cloud Engines

建构图(无服务器Python管道)

数据匠于Apache Iceberg构建管道作业,建构图供无服务器、"无基建"之执行引擎。

非管理 Spark 或 Kubernetes 集群以运行定时数据转换,汝但定义汝之管渠步骤为标准 Python 或 SQL 函數。Bauplan 随需而生无状之计算,以执行代码,既毕则立止,用计每调一用之模。

Bauplan 融合 Apache Iceberg 與 Project Nessie,供「數據Git」之體驗。開發者與人工智能之代理,可於湖屋中創立獨立分支,運行實驗性之 Python 管道以驗證變更,並將更新原子式合併回生產,無需擔憂數據之毀損,亦無需支付闲置之預備計算資源之費用.

Spice.ai (聯邦查詢加速)

Spice.ai (SpiceAI) 专攻高性能应用与AI智能体之数据访问层。其作联邦查询运行时,能加速迟缓之数据查询,乃于本地具现"热"数据集。

Spice.ai 施行层级缓存之模。其将查询结果存于内存,复将活跃数据工作集缓存于高性能本地引擎,如DuckDB或Cayenne(一原生列式引擎)。

近岁,Spice.ai于其v2.0之新补,添设一前缀感知之文件缓存,以促数据湖之检阅,复设一统计缓存。 用以记录文件元数据,并有原生变更数据捕获(CDC)同步功能,可自数据库(如 PostgreSQL WAL 流)直接将更新流至本地加速缓存。此法令本地缓存之表实时更新,无需繁复之 Kafka 或 Debezium 设置。

Dremio (分布式 MPP 湖仓平台)

企业级BI,多源数据联邦,及语义层管理,Dremio乃湖仓之中枢引擎也。

Dremio基于Apache Arrow自下而上构建,尽除序列化之税。Dremio询数据时,物理执行计划以Arrow列式格式原生处理内存结构,复以Arrow Flight将结果流至客户端(如Python脚本或BI工具)。

Dremio于浩瀚云数据湖间,以三层架构达至秒以下之速:

  • 列式云缓存(C3):自动将对象存储(如AWS S3或Azure ADLS)之数据块,缓于执行节点之本地NVMe驱动器,化远云I/O为近盘读取之速。
  • 遐思: Dremio之查询规划者,自若无形,以物理优化之预计算Iceberg材料化,以速用户之查询。自Dremio v26始,Reflections唯存Iceberg格式存储数据,废旧式以简存储之道。Dremio之自主Reflections 依人工智能观七日之内查询之律,自为立、更、废映像,以保仪表盘之优效,无需人手之理.
  • 启目录(由Apache Polaris所驱): Dremio 之自具目录,乃基于 Apache Polaris 而成,至二零二六年,始晋为 Apache 之顶级项目。Open Catalog 实施 Apache Iceberg 之 REST 规范,使他种引擎(如 Spark 或 Flink)得安全查询同表。其供细微之访问控制(FGAC),含列之掩蔽与行之筛选。

Dremio 之 AI 语义层許團隊一一定義虛擬資料集(視圖),一用於諸BI與AI應用。此層直嵌入列與資料集,載述、維基、標籤。義理層教AI模型識數據商業脈絡,使AI使者能生成正軌SQL詢問,非憶幻泛常之碼。Dremio亦嵌入創生AI功能,自生成維基述說,依模式建議標籤。

Dremio MPP query engine architecture showing Columnar Cloud Cache on NVMe, Iceberg-based Autonomous Reflections, Open Catalog powered by Polaris, and Arrow Flight client streaming

建筑选择框架与结论

今之數據工程,非復擇於本地腳本與廣大集群也。乃在配適其工具鏈於數據體量、延遲SLA與組織所需。

为导汝之择,循此决疑之树。

  1. 君之劳役,运行于本地乎,抑或单节点乎?
    • 若君好以SQL为分析查询之文:用之DuckDB(达克数据库)此无需配置,能处理超乎内存之数据,以溢出内存方式为之。
    • 若尔撰程序之Python或RustDataFrame之管道:用之波拉斯,其惰性优化器与稳定流引擎,可促速行。
    • 若汝有旧式PySpark或Spark SQL之码,而欲避JVM之累:当用LakeSail,此可本生于Rust,行Spark Connect gRPC之逻辑策。
    • 若汝在构制自用之问询引擎或析理之器:亦当用Apache Arrow DataFusion 乃尔之模块编译框架也。
  2. 尔之作业是否逾越单节点之能(多TB规模、高并发、或跨源BI)?
    • 若尔欲求无服务器、混合之 DuckDB SQL 代码之延展: 则用 MotherDuck
    • 若需于 Iceberg 上直建无服务器 Python 管道,兼具类 Git 版本控制之能:用之造物之图.
    • 若需缓存并加速联邦数据以供本地AI/RAG应用之用:用之辛普斯·爱伊.
    • 若需企业级BI、语义治理、多源联邦及Iceberg上的亚秒级SQL查询:用之Dremio(Dremio).

Flowchart decision tree helping engineers select the correct analytical engine based on workload and scale

单节点数据技术,已拓机器之能。藉Apache Arrow以零拷贝内存布局,DataFusion类编译器,及向量化执行引擎之力,可处以往需繁复分布式集群方能为之之务。

尔营新数台,首当审尔事可独于单结运行否。今世竖列引擎,使尔得营、试、行管渠,而地构之繁简甚微。及尔数据之广或组司之并需散布之制,则当循渐易,用通开之准,若 Apache Iceberg 与 Apache Arrow 是也.

加速尔湖宅之技

欲深谙现代数据架构之道,可循下列诸步:

  • 览湖居参考之文探求"构架Apache Iceberg湖仓"复有诸技术之著述,述分区调适、目录设计、查询优化之事于其间。書籍。AlexMerced.com
  • 自建本地管道:始下载之pysailpolars乃以之试于本地Parquet数据集。较诸既有框架,观其查询规划之时与CPU内存之迹。
  • 评Dremio Cloud若汝地之查询引擎触及其限,或需跨多源聚散数据,直于汝之S3数据湖部署Dremio。试Dremio Cloud三十日免费。Dremio.com(德瑞米奥网)入门指南.