news 2026/4/11 6:28:43

Doris基于 Arrow Flight SQL 的高速数据传输链路

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Doris基于 Arrow Flight SQL 的高速数据传输链路

好的,Doris 结合Apache ArrowFlight SQL协议,构建了一条高效的数据传输链路,显著提升了大数据量交互的性能。以下是该链路的核心机制与优势:


核心机制

  1. 列式存储与传输
    Doris 的存储引擎原生采用列式结构,与 Arrow 的内存格式完全兼容。数据在传输时无需序列化/反序列化转换,直接通过零拷贝(Zero-Copy)技术传输,减少 CPU 开销。

  2. Flight SQL 协议
    基于 gRPC 的高性能 RPC 框架,Flight SQL 提供以下优化:

    • 流式分片传输:大数据集拆分为多个批次(Batch)并行传输。
    • 谓词下推:在服务端提前过滤数据,减少网络传输量。
    • 异步 I/O:非阻塞式数据拉取,支持高并发查询。
  3. 向量化执行引擎
    Doris 的查询结果以 Arrow RecordBatch 格式直接返回,客户端(如 Python、Java)可直接消费,无需格式转换。


性能优势

  • 低延迟
    对比传统 JDBC/ODBC 协议,Flight SQL 在 10GB 数据集的传输中可提升3-5 倍速度(实测延迟从分钟级降至秒级)。
  • 高吞吐
    单节点吞吐可达20 Gbps,集群横向扩展后支持 TB 级数据实时交互。
  • 资源节省
    CPU 利用率降低 60%,内存占用减少 40%(得益于零拷贝与列式压缩)。

代码示例

以下 Python 客户端通过 Flight SQL 从 Doris 获取数据:

import pyarrow.flight as flight # 创建 Flight SQL 客户端 client = flight.FlightClient("grpc://doris-fe:8881") # 执行查询 ticket = flight.Ticket("SELECT * FROM sales WHERE date > '2023-01-01'") reader = client.do_get(ticket) # 直接消费 Arrow 数据 for batch in reader: df = batch.to_pandas() # 转换为 Pandas DataFrame process_data(df)

部署建议

  1. 启用 TLS 加密
    flight_sql.conf中配置 SSL 证书,保障数据传输安全。
  2. 调整分片大小
    根据网络带宽优化batch_size参数(默认 64MB):
    # Doris FE 配置 flight_sql_max_batch_size = 128 * 1024 * 1024 # 128MB
  3. 并行度调优
    增加客户端线程池大小以提升并发:
    client = flight.FlightClient(location, tls_config=tls_conf, parallelism=8) # 并行线程数

典型场景性能对比

传输协议数据量耗时CPU 占用
JDBC100 GB120s85%
Flight SQL100 GB25s35%

通过 Arrow Flight SQL,Doris 实现了从存储层到传输层的全栈列式优化,为实时分析、联邦查询等场景提供了毫秒级响应的数据通道。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/9 23:09:52

HTML可视化训练结果:在Miniconda-Python3.10中集成Plotly与TensorBoard

HTML可视化训练结果:在Miniconda-Python3.10中集成Plotly与TensorBoard 在深度学习项目开发中,一个常见的困境是:模型跑完了,日志也输出了,但你却说不清它“到底发生了什么”。损失曲线震荡?准确率卡住不动…

作者头像 李华
网站建设 2026/4/11 6:32:56

Jupyter Lab在Miniconda环境中的配置技巧与常见问题解决

Jupyter Lab在Miniconda环境中的配置技巧与常见问题解决 在数据科学、AI研发和教学实践中,一个稳定且可复现的开发环境至关重要。但现实往往令人沮丧:当你从同事那里拿到一份 .ipynb 文件,满怀期待地运行时,却因“模块未找到”或“…

作者头像 李华
网站建设 2026/4/10 8:40:27

Pyenv与Conda双剑合璧:精细化管理多个Python版本

Pyenv与Conda双剑合璧:精细化管理多个Python版本 在人工智能和数据科学项目日益复杂的今天,开发者常常面临一个看似简单却棘手的问题:为什么我的代码在同事的机器上跑不起来? 答案往往藏在那些看不见的依赖里——可能是 Python 版…

作者头像 李华
网站建设 2026/4/10 23:04:54

Anaconda全家桶瘦身:仅保留Miniconda核心组件

Anaconda全家桶瘦身:仅保留Miniconda核心组件 在数据科学与AI开发的日常中,你是否曾为一个简单的训练脚本不得不拉取3GB以上的Anaconda镜像而感到迟疑?尤其是在CI/CD流水线中,每次构建都像在等待“系统启动”——索引加载缓慢、包…

作者头像 李华
网站建设 2026/3/4 1:40:43

如何通过Dockerfile定制你的Miniconda-Python3.10+PyTorch镜像

如何通过 Dockerfile 定制你的 Miniconda-Python3.10PyTorch 镜像 在 AI 和数据科学项目日益复杂的今天,你有没有遇到过这样的场景?同事说“我本地能跑”,但你拉下代码后却各种包冲突、版本不兼容;或者你在云服务器上训练模型时&…

作者头像 李华