【活动回顾】Data + AI 时代下的云数仓设计 @Qcon

news2024/11/26 4:49:17

此前,由 InfoQ 中国举办的 QCon 全球软件开发大会在广州圆满落幕。本次大会有近百位国内外技术大咖现场分享前沿技术案例与创新实践,共有十二个专题,近五十余场分享。Databend Cloud 联合创始人张雁飞受邀参与了此次技术盛宴,并在新型数据库专场进行了一次主题为《 Databend: 大模型时代的 Cloud Warehouse 设计探索 》的演讲。

演讲嘉宾:张雁飞 Databend: GitHub - datafuselabs/databend: A modern cloud data warehouse focusing on reducing cost and complexity for your massive-scale analytics needs. Open source alternative to Snowflake. Also available in the cloud: https://app.databend.com 🧠

嘉宾介绍:Databend Cloud 联合创始人 ,前阿里云数据库内核组早期成员、前青云数据库团队负责人。开源 Databend 项目主要负责人。

本次分享聚焦于大模型时代下的 Cloud Warehouse 设计探索,分析如何利用开源与商业 LLMs 提升 Cloud Warehouse 的能力,实现更智能、自动化的数据分析。本次分享主要分为两个部分:

  • 现代的数仓如何设计

  • 数仓如何与 AI 结合

为什么需要现代云数仓

当用户想要进行大数据分析时,心里所期望的基本是:

我要进行一次分析,希望这个分析尽可能快地完成,同时,我只希望为实际使用的资源付费。

成本 = 实际资源用量 * 使用时间

下面我们来探讨下数据仓库应该如何满足这个需求。首先我们看看传统数仓架构在满足这个需求上存在哪些问题。

在传统数据仓库架构中,一般采用的是 share-nothing 架构,CPU、内存和存储紧密绑定,这种设计一般被称为南北向设计,它需要依靠数据分区来实现计算任务的拆分。然而,在这种架构中,往往会产生大量的冗余副本,造成资源的浪费。当我们需要添加新的节点时,就会面临数据的迁移和均衡问题,导致资源交付不是很及时。

 所以在传统架构下,用户数据和计算完全耦合在一起,整体的成本相对较高:

传统数仓架构的成本 =  资源 * 开机时间

那么 Databend 新一代云原生架构是如何满足这种需求的呢?

Databend 的架构在设计上做了很多改进:

  • 基于共享存储的设计: Databend 支持多种对象存储,包括 Amazon S3, Azure Blob, OSS, COS 等。这种设计模式允许存储按使用量付费,具有高度的弹性。当计算节点需要扩展时,数据无需进行任何移动。

  • 存储和计算分离的架构: 在此架构下,计算节点可以根据需求进行动态启动。当业务处于空闲状态时,计算节点会自动进入休眠,从而有效节省资源。

  • 面向对象存储的调度器设计: 由于对象存储存在多种限制并且易于抖动,其并非专为数据仓库设计。因此,Databend 的调度器和优化器针对对象存储进行了大量优化。例如,调度器上的存储和计算在运行时具有双向感压特性,同时在执行 GroupBy shuffle 时,传输的是文件地址而非数据。

  • 高度的弹性伸缩性: 借助 Kubernetes(k8s)的能力,Databend 能够快速进行弹性伸缩,以适应各种业务需求和负载变化。

在设计 Databend 时,我们借鉴了目前市场上一些优秀的数仓设计。例如,我们参考了 Clickhouse 的向量化设计,以提高单机的性能。同时,我们也借鉴了 Snowflake 的集群优点,以增强分布式计算能力。综合了这些优点后,我们选择了 Rust 语言进行重新研发和实现。Databend 还有一个重大的的改进,我们把每一个功能层都做了微服务化,这样它的架构大概是:

然而,Databend 的设计过程中也充满了挑战,因为云原生数仓的设计与传统数仓的设计有着显著的差异。主要的挑战主要体现在以下几个方面:

1️⃣ 大规模数据写入的网络流量费用

在处理大规模数据写入时,可能会在云端产生显著的网络流量费用。

2️⃣ 基于对象存储的设计问题

由于对象存储本身并非专为数仓设计,因此,在平衡 CPU、网络 IO、本地 IO 的延迟和带宽上限时,可能会遇到各种挑战。

3️⃣ 提升 Databend 云数据仓库的智能化程度

我们希望设计一个能够自动处理智能索引的系统,以提高查询效率。

4️⃣ 数据仓库与数据湖(Data Lake)的整合问题

尽管将二者结合可能带来新的设计挑战,但我们坚信 Lake-First 是未来的发展趋势。因此,Databend 采用 Catalog 的便捷方式来支持读取 Hive、Iceberg 等的数据。

在过去的两年中,我们主要致力于研究并解决上述挑战。目前,Databend 已经发布了 v1.2 版本,成功解决了上面遇到的主要挑战。当然,仍有许多优化的空间等待我们去探索。目前,Databend 已经被多家企业在生产环境中采用。

👨🏻‍💻 接下来,我们来看看 Databend 新一代架构在实际生产环境中的表现。以下数据均源自用户在真实场景下的反馈:

  • 在替换 Trino/Presto 场景中,节省了75%的成本

  • 在替换 Elasticsearch 的场景中,节省了90%的成本

  • 在数据归档的低频查询场景中,节省了95%的成本

  • 在日志存储及分析场景中,节省了75%的成本

  • 每天有超过1PB+ 的数据通过 Databend 进行存储和分析,每个月为用户 节省了数百万美元 的成本。

这些数据说明,Databend 能够显著降低用户成本,充分体现了新一代云原生数据仓库架构所带来的巨大价值。

数据仓库与AI

我们目前正处在大数据与 AI 的黄金时期。在前面的部分,我们已经讨论了大数据分析的相关内容,接下来,我们聊聊 AI。

 当我们提及 AI,以下几个主题往往会首先浮现在脑海中::

  • LLM (Large Language Model)语言大模型

  • 神经网络

  • 内容生成

  • 智能问答

然而,从零开始训练一个大型模型,例如 Meta 的 LLaMa 模型,面临的挑战是巨大的,尤其是在成本方面。公开数据显示,他们训练一次该模型可能需要花费数百万美元。

根据我们对市场上各种商业和开源模型的测试,OpenAI 的 GPT 模型在商业化条件下表现优秀(截止到 2023 年 5 月)。特别是在智能客服系统中,我们非常看重模型根据内容片段和提示词(Prompt)进行推理的能力。

这里有一个来自 lmsys.org(LMSYS Org) 的模型能力排名供大家参考:

目前,我比较关注的 AI 应用方向主要是:

  • 智能问答(Question and Answering)

  • 全自动式大数据分析(AutoInsights)

能问答系统(Question and Answering)

首先,让我们了解一下智能问答系统的工作原理,然后再探讨我们如何在数仓中实现这一功能。

由于大模型每次处理的输入有限制,我们需要将大量的文本拆分为小片段,并将其向量化存储在向量数据库(Vector Database)中。这种设计使得智能问答系统的工作原理可以简化为以下四个步骤:

  1. 将输入的问题进行向量化处理,得到问题向量 QV。

  2. 利用向量数据库进行相似度检索,从而找出与 QV 最相似的文档片段集合(Documents)。

  3. 根据已给出的提示词(Prompt),将找到的文档片段进行 AI 生成式处理。

  4. 返回处理后的答案。

想要了解智能问答系统的朋友,我推荐你们访问这个链接:https://ask.databend.rs 这是一个以Databend 文档为基础的智能问答系统,它完全基于 Databend 构建。

在 Databend 中,我们实现了诸如文本向量化(Embedding)、向量数据库(Vector Database)、相似度检索等功能,还引入了 AI 生成式处理(润色)等技术。

通过 Databend 提供的一系列 SQL 函数(AI Functions),用户可以非常方便地利用这些函数来创建自己的智能问答系统。这不仅大大简化了智能问答系统的构建过程,同时也为大数据的利用提供了更多可能性。Databend 使你能够在同一套系统中进行 OLAP 和向量数据的处理,同时可以对接各种大模型,进一步拓展大数据的边界。

全自动式分析 (AutoInsights)

SQL 分析通常较为复杂,对用户而言,快速编写 SQL 是一项巨大的挑战。我们是否可以简化这个步骤,让 AI 直接基于表结构和数据摘要自动生成 SQL 呢?答案是肯定的。目前,Databend Cloud 已上线该功能。

在 Databend 中,大部分列都已经建立了索引,再结合优化器的良好设计,生成的 SQL 可以在无需人工干预的情况下快速执行。

这样,我们的自动化分析可以拆解为以下步骤:

  • 获取表结构

  • 让 AI 根据表结构提几个最关注的问题

  • 把这几个问题转换为 SQL

  • Databend 执行 SQL 并生成结果

  • 根据结果自动化生成分析报告

整个流程基本为:

总结

我们正在经历一个 Data + AI 的黄金时期,AI 已在大数据领域展现出巨大的潜力,比如 OpenAI 最近推出的 ChatGPT Code Interpreter,这都标志着 AI 可以帮助我们以更创新的方式挖掘数据的价值。

Databend 在设计之初就充分考虑到这种智能化的需求,因此我们研发了 AI Functions。这使得 Databend 不仅是一个数据仓库,更是一个 Large Language Model(LLM)的入口,可以通过 SQL 来表达 AI 的能力,未来 AI 将是每个数据仓库的标配。

我们坚信,Databend 将继续引领数仓的创新,为用户带来更多的价值。Databend 不仅可以帮助你降低成本,提高效率,还可以借助 AI 的能力挖掘更大的数据价值,使大数据分析的门槛进一步降低。

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

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

相关文章

SpringBoot整合gRPC - proto3 -- 简单明了

项目结构 pom引入(parent中引入即可) <properties><net-devh-grpc.version>2.14.0.RELEASE</net-devh-grpc.version><os-maven-plugin.version>1.6.0</os-maven-plugin.version><protobuf-maven-plugin.version>0.5.1</protobuf-mave…

基于flask框架的用户注册页面实例

文件框架 app.py文件 from flask import Flask, render_template, requestapp Flask(__name__)app.route(/) def index():return register()# 申请注册页面 app.route(/register, methods["GET"]) def register(): # put applications code herereturn render_tem…

element-plus源码学习后,我了解到多种多样的写法

文章封面来自于深圳湾桥&#xff0c;很漂亮&#xff01; 本文是阅读源码之后&#xff0c;学习到一些新写法&#xff0c;平常业务开发也可以用起来。在我看来&#xff0c;阅读源码&#xff0c;不但能知道该框架的底层原理&#xff0c;出现bug时&#xff0c;可以快速排查和修复&…

如何使用unittest批量管理Python接口自动化测试用例?

我们日常项目中的接口测试案例肯定不止一个&#xff0c;当案例越来越多时我们如何管理这些批量案例&#xff1f;如何保证案例不重复&#xff1f;如果案例非常多&#xff08;成百上千&#xff0c;甚至更多&#xff09;时如何保证案例执行的效率&#xff1f;如何做&#xff08;批…

如何记住表格列宽,供下次调用,来提升用户操作体验?

如何让系统记住用户每次拖动表格后的列宽&#xff0c;下次表格初始化就可以直接用该列宽&#xff0c;来显示表格的每一个列。每个用户的使用习惯不一样&#xff0c;和使用的功能不一样&#xff0c;即使是同一套系统&#xff0c;只要用户不同&#xff0c;就有可能需要不同的列宽…

【全局异常】返回值通过【枚举】的形式返回

&#x1f4da;目录 需求创建抽象类创建业务枚举使用枚举升级简单的方式实现:使用注解方式实现: 需求 后台程序发生异常&#xff0c;通过全局的异常类使用枚举的方式把错误信息返回给前端。 全局异常类处理方式&#xff1a; 改造前使用 改造后使用枚举传递&#xff1a; 创建抽象…

高楼电脑端+黑金手机端个人引导页HTML源码

https://wwwf.lanzout.com/ipAfg12n5y4f 二、黑金主题网址导航 https://wwwf.lanzout.com/ieSVB12n5y2d

C语言文件操作【超详解】

目录 1.为什么使用文件 2.什么是文件 2.1程序文件 2.2数据文件 2.3文件名 3.文件的打开和关闭 3.1文件指针 3.2文件的打开和关闭 3.2.1fopen函数 3.2.2fclose函数 4.文件的顺序读写 4.1顺序读写函数介绍 4.1.1 fputc、fgetc和fputs、fgets 4.1.2fprintf、fscanf&…

装饰(Decorator)模式

目录 动机使用场景参与者协作效果实现相关模式应用和思考类图 装饰模式是对象结构型模式&#xff0c;动态地给一个对象添加一些额外的职责。就增加的功能来说装饰器模式相比生成子类更为灵活。 动机 有时候需要给某个对象而不是整个类添加一些功能&#xff0c;使用继承也可以&…

【SDOF振荡器的非线性-非弹性多轴时间响应分析】用于SDOF振荡器非线性非弹性时程分析的鲁棒性分析研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

经典指针笔试题你会了嘛

作者简介&#xff1a;დ旧言~&#xff0c;目前大一&#xff0c;现在学习Java&#xff0c;c&#xff0c;Python等 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 望小伙伴们点赞&#x1f44d;收藏✨加关注哟&#x1f495;&#x1f495; 指针和数组笔试题 &…

【Linux】多线程 之 POSIX信号量

文章目录 1. 概念2. 信号量的工作机制3. 认识接口sem_init ——初始化信号量sem_destroy——销毁信号量sem_wait ——申请信号量sem_post ——释放信号量 4. 基于环形队列的生产消费模型原理解析代码代码解析ringqueue类构造析构push ——生产pop ——消费 代码实现Ringqueue.h…

精通Skia引擎,发挥应用程序中高性能图形的潜力

Skia是由Google开发的一个开源的2D图形库。它提供了丰富的图形绘制、图像处理和渲染功能&#xff0c;适用于多个平台&#xff0c;包括操作系统、浏览器和移动设备等。Skia主要用于处理2D图形的绘制、文字渲染、图像处理和用户界面的呈现。 特点和功能&#xff1a; 高性能&…

基于Javaweb实现ATM机系统开发实战(十一)存储交易记录

首先创建一个业务接口&#xff1a; package com.atm.service;import com.atm.pojo.RunMessage;//交易记录的业务接口 public interface RunMessageService{//添加交易记录public void addRunMessage(RunMessage runMessage) throws Exception ; }再完成业务接口的实现类&#…

iNav开源代码之FAILSAFE

iNav开源代码之FAILSAFE 1. 源由2. FAILSAFE类别3. FAILSAFE配置4. FAILSAFE阶段&状态机5. 参考资料 1. 源由 最近因为炸机&#xff0c;百思不得其解。 关于炸鸡的过程&#xff0c;就不再展开&#xff0c;都是“泪”啊&#xff01;想进一步了解的&#xff0c;请参阅前面的…

科普一下Elasticsearch中BM25算法的使用

首先还是先了解几个概念&#xff0c;Elasticsearch是一个开源的分布式搜索和分析引擎&#xff0c;它使用一系列算法来计算文档的相关性分数&#xff08;relevance score&#xff09;。这些算法用于确定查询与文档的匹配程度&#xff0c;以便按相关性对搜索结果进行排序。以下是…

【C++】多线程编程一(初识并发和多线程)

目录 一、并发和并行的概念 1.并发 2.并行 3.并发和并行的区别 二、并发的途径 多进程并发 多线程并发 三、C11相关多线程编程的头文件 一、并发和并行的概念 1.并发 并发&#xff1a;指同一时刻只能有一条指令执行&#xff0c;但是多个进程指令被快速地轮换执行&#…

C语言--文件操作

文章目录 前言文件文件名 文件的打开和关闭文件指针文件的打开和关闭 文件的顺序读写fgetc、fputcfgets、fputsfprintf、fsanffread、fwrite 文件的随机读写fseekftellrewind 文本文件和二进制文件文件读取结束的判定feof 文件缓冲区 前言 在我们写完一个程序之后&#xff0c;…

【数据结构】树二叉树的概念以及堆的详解

⭐️ 往期相关文章 ✨链接1&#xff1a;【数据结构】顺序表 ✨链接2&#xff1a;【数据结构】单链表 ✨链接3&#xff1a;【数据结构】双向带头循环链表 ✨链接4&#xff1a;【数据结构】栈和队列 ⭐️ 树的概念 百度百科的解释&#xff1a;树是一种非线性的数据结构&#xf…

Jmeter四种关联方法讲解

目录 方法一&#xff0c;从前一个请求中取&#xff0c;用正则表达式提取器。 二、json path extractor 三、json extractor 四、XPath Extractor 方法一&#xff0c;从前一个请求中取&#xff0c;用正则表达式提取器。 具体方法&#xff0c;在需要获得数据的请求上右击添加…