PromQL Got a BOOST: 用 Rust 重写 Prometheus 的查询引擎
第三届中国 Rust 开发者大会 PromQL Got a BOOST: 用 Rust 重写 Prometheus 的查询引擎 Ruihang Xia @greptime.com Ruihang GitHub: waynexia Losing hair at Greptime Wanna sleep 10 hrs/day Learn JS every year Healing0 码力 | 39 页 | 6.95 MB | 1 年前3⽤ egg 孵化你的 SQL 优化器 - 王润基
第三届中国Rust开发者⼤会 ⽤ egg 孵化你的 SQL 优化器 王润基 RisingWave 内核开发⼯程师 ? Parser Binder Optimizer Executor SQL AST Logical Plan Physical Plan Table Catalog Storage RisingLight 查询引擎的整体结构 SELECT name, url FROM Hash Join #0 = #2 Scan $1.1, $1.2 Scan $2.1, $2.2 Projection #1, #3 ⼀个 SQL 语句优化的例⼦ 基于规则的优化 (RBO) 基于代价的优化 (CBO) 谓词下推 Join Filter A B Join Filter A B Filter Join A Join B C Join C Nested Loop Join 连接重排序 连接算法选择 TopN A Order TopN A Limit 查询优化 定义计划节点 定义重写规则 ⽤纯 Rust 编写的第⼀代优化器 Visitor 模式 ⽤纯 Rust 编写的第⼀代优化器 e-class e-node Rewriting Rewriting (* ?x 2) => (<< ?x 1) Rewriting0 码力 | 39 页 | 6.48 MB | 1 年前3Hello 算法 1.1.0 Rust版
10.3 二分查找边界 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 10.4 哈希优化策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 10.5 重识搜索算法 . . . 时间效率:算法运行速度的快慢。 ‧ 空间效率:算法占用内存空间的大小。 简而言之,我们的目标是设计“既快又省”的数据结构与算法。而有效地评估算法效率至关重要,因为只有 这样,我们才能将各种算法进行对比,进而指导算法设计与优化过程。 效率评估方法主要分为两种:实际测试、理论估算。 2.1.1 实际测试 假设我们现在有算法 A 和算法 B ,它们都能解决同一问题,现在需要对比这两个算法的效率。最直接的方法 是找一台 递归:“自上而下”地解决问题。将原问题分解为更小的子问题,这些子问题和原问题具有相同的形式。 接下来将子问题继续分解为更小的子问题,直到基本情况时停止(基本情况的解是已知的)。 以上述求和函数为例,设问题 ?(?) = 1 + 2 + ⋯ + ? 。 ‧ 迭代:在循环中模拟求和过程,从 1 遍历到 ? ,每轮执行求和操作,即可求得 ?(?) 。 ‧ 递归:将问题分解为子问题 ?(?) = ?+?(?−1)0 码力 | 388 页 | 18.50 MB | 1 年前3Hello 算法 1.2.0 简体中文 Rust 版
10.3 二分查找边界 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 10.4 哈希优化策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 10.5 重识搜索算法 . . . 时间效率:算法运行时间的长短。 ‧ 空间效率:算法占用内存空间的大小。 简而言之,我们的目标是设计“既快又省”的数据结构与算法。而有效地评估算法效率至关重要,因为只有 这样,我们才能将各种算法进行对比,进而指导算法设计与优化过程。 效率评估方法主要分为两种:实际测试、理论估算。 2.1.1 实际测试 假设我们现在有算法 A 和算法 B ,它们都能解决同一问题,现在需要对比这两个算法的效率。最直接的方法 是找一台 递归:“自上而下”地解决问题。将原问题分解为更小的子问题,这些子问题和原问题具有相同的形式。 接下来将子问题继续分解为更小的子问题,直到基本情况时停止(基本情况的解是已知的)。 以上述求和函数为例,设问题 ?(?) = 1 + 2 + ⋯ + ? 。 ‧ 迭代:在循环中模拟求和过程,从 1 遍历到 ? ,每轮执行求和操作,即可求得 ?(?) 。 ‧ 递归:将问题分解为子问题 ?(?) = ?+?(?−1)0 码力 | 387 页 | 18.51 MB | 9 月前3Hello 算法 1.0.0 Rust版
10.3 二分查找边界 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 10.4 哈希优化策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 10.5 重识搜索算法 . . . 时间效率:算法运行速度的快慢。 ‧ 空间效率:算法占用内存空间的大小。 简而言之,我们的目标是设计“既快又省”的数据结构与算法。而有效地评估算法效率至关重要,因为只有 这样,我们才能将各种算法进行对比,进而指导算法设计与优化过程。 效率评估方法主要分为两种:实际测试、理论估算。 2.1.1 实际测试 假设我们现在有算法 A 和算法 B ,它们都能解决同一问题,现在需要对比这两个算法的效率。最直接的方法 是找一台 递归:“自上而下”地解决问题。将原问题分解为更小的子问题,这些子问题和原问题具有相同的形式。 接下来将子问题继续分解为更小的子问题,直到基本情况时停止(基本情况的解是已知的)。 以上述求和函数为例,设问题 ?(?) = 1 + 2 + ⋯ + ? 。 ‧ 迭代:在循环中模拟求和过程,从 1 遍历到 ? ,每轮执行求和操作,即可求得 ?(?) 。 ‧ 递归:将问题分解为子问题 ?(?) = ?+?(?−1)0 码力 | 383 页 | 17.61 MB | 1 年前3新一代分布式高性能图数据库的构建 - 沈游人
员工 手机号 设备 商品 商品 查询 / 操作 生活中无处不在的图 图分析技术分类 图查询 • 使用图数据库的查询语言进行点边搜索 图算法 • 中心性算法 • 社区算法 • 路径算法 • … 图深度学习 • 图嵌入 • 图卷积 • 图注意力网络 • 图自编码器 图查询及其应用场景 图查询 • 使用图数据库的查询语言进行点边的关联查询,可以快速完成传统数据库难以完成的 多度点边关 图技术全景图—— Graph Technology Landscape 2020 • 图数据库 • 图数据建模 • 图计算引擎 • 图数据集成 • 可视化分析 • 知识图谱解决方案 • 图查询语言 • 欺诈检测 • 网络安全分析 • 社交网络分析 • BI 工具 • 图分析工具集 • 图咨询服务 Source : Graph Aware 图数据库发展趋势 AtlasGraph 业务对大图分析的诉求(千亿点、万亿边) • 实时风控对图库的性能挑战( OLTP 毫秒级响应) • 海致图平台产品服务于金融、政府行业有大量业务经验积累(接近客户需求) • 现有开源产品无法满足要求(受限于基础架构设计,优化性能有限) 新一代分布式图数据库需具备的特性 特性 信 雅 达 • 高可用 • 一致性(事 务) • 高性能 • 低资源消耗 • 易用 • 功能丰富 AtlasGraph 关键特性0 码力 | 38 页 | 24.68 MB | 1 年前3Rust 程序设计语言简体中文版
提供相应的命令。 发布(release)构建 当项目最终准备好发布时,可以使用 cargo build --release 来优化编译项目。这会在 target/release 而不是 target/debug 下生成可执行文件。这些优化可以让 Rust 代码运行的更 快,不过启用这些优化也需要消耗更长的编译时间。这也就是为什么会有两种不同的配置:一 种是为了开发,你需要经常快速重新构建;另一种是为用户构建最终程序,它们不会经常重新 通配模式和 _ 占位符 让我们看一个例子,我们希望对一些特定的值采取特殊操作,而对其他的值采取默认操作。想 象我们正在玩一个游戏,如果你掷出骰子的值为 3,角色不会移动,而是会得到一顶新奇的帽 子。如果你掷出了 7,你的角色将失去新奇的帽子。对于其他的数值,你的角色会在棋盘上移 动相应的格子。这是一个实现了上述逻辑的 match ,骰子的结果是硬编码而不是一个随机值, 其他的逻辑部分使用了没有 义在同一模块中(hosting 和 serving 被一起定义在 front_of_house 中)。继续沿用家庭关 系的比喻,如果一个模块 A 被包含在模块 B 中,我们将模块 A 称为模块 B 的 子(child),模 块 B 则是模块 A 的 父(parent)。注意,整个模块树都植根于名为 crate 的隐式模块下。 这个模块树可能会令你想起电脑上文件系统的目录树;这是一个非常恰当的类比!就像文件系0 码力 | 600 页 | 12.99 MB | 1 年前3Rust 程序设计语言 简体中文版 1.85.0
简体中文版 发布(release)构建 当项目最终准备好发布时,可以使用 cargo build --release 来优化编译项目。这会在 target/ release 而不是 target/debug 下生成可执行文件。这些优化可以让 Rust 代码运行的更快,不 过启用这些优化也需要消耗更长的编译时间。这也就是为什么会有两种不同的配置:一种是为 了开发,你需要快速且频繁地重新构建;另一种是为用户构建最终程序,它们不会经常重新构 通配模式和 _ 占位符 使用枚举,我们也可以针对少数几个特定值执行特殊操作,而对其他所有值采取默认操作。想 象我们正在玩一个游戏,如果你掷出骰子的值为 3,角色不会移动,而是会得到一顶新奇的帽 子。如果你掷出了 7,你的角色将失去一顶新奇的帽子。对于其他的数值,你的角色会在棋盘 上移动相应的格子。这是一个实现了上述逻辑的 match,骰子的结果是硬编码而不是一个随机 值,其他的逻辑部分使用了没 一模块中; hosting 和 serving 被一起定义在 front_of_house 中。继续沿用家庭关系的比喻,如果一个 模块 A 被包含在模块 B 中,我们将模块 A 称为模块 B 的 子(child)模块,模块 B 则是模块 A 的 父(parent)模块。注意,整个模块树都植根于名为 crate 的隐式模块下。 135/562Rust 程序设计语言 简体中文版 这个模块树可能会0 码力 | 562 页 | 3.23 MB | 9 天前3Rust 语言学习笔记
................................................................................. 106 第八章 Rust 性能优化 ............................................................................. 107 第九章 测试与评测 .... a/b/c/d.rs 这个模块。 换句话说,必须依靠 rust 的默认约定去由开发去建立层级关系。rust 的层级 关系是我们自己依靠默认规则自己定义出来的! 那么,Rust 的多层模块的定义查询遵循如下两条规则: 1.优先查找 xxx.rs 文件 2.main.rs、lib.rs、mod.rs 中的 mod xxx;默认优先查找同级目录下的 xxx.rs 文件; 其他文件 yyy build --release # 这个属于优化编译 ps: ./target/debug/hellorust.exe ps: ./target/release/hellorust.exe # 如果前面是优化编译,则这样运行 ps: cargo run # 编译和运行合在一起 ps: cargo run --release # 同上,区别是是优化编译的 第二章 Rust0 码力 | 117 页 | 2.24 MB | 1 年前3Comprehensive Rust(简体中文) 202412
值得一提的是,Cargo 本身就是一个功能强大且全面的工具。它能够实现许多高级功能,包括 但不限于: * 项目/软件包结构 * 工作区 * 开发依赖和运行时依赖管理/缓存 * 构建脚本 * 全局安装 * 它还可以使用子命令插件(例如 cargo clippy)进行扩展。 – 详情请参阅 官方 Cargo Book 2.2 本培训中的代码示例 在本培训中,我们将主要通过示例探索 Rust 语言,这些示例可以通过浏览器执行。这能大大简化配置过 build 只进行编译,而不运行。你 可以在 target/debug/ 中找到常规调试 build 的输出。使用 cargo build --release 在 target/release/ 中生成经过优化的 发布 build。 7. 可以通过修改 Cargo.toml 为项目添加依赖项。当运行 cargo 命令时,系统会自动下载和编译缺 失的依赖项。 尽量鼓励全班学员安装 Cargo 并使用本地 ”Tools” 下,使用 rustfmt 选项以 ”standard” 方式设置代码格式。 • Rust 具有两个用于生成代码的主要“配置文件”:调试(进行额外运行时检查、较少优化)和发布(较 少运行时检查,进行大量优化)。可以在顶部的”Debug” 下访问这些内容。 • 如果感兴趣,您可以使用 ”...” 下的 ”ASM” 查看生成的汇编代码。 As students head into the0 码力 | 359 页 | 1.33 MB | 10 月前3
共 39 条
- 1
- 2
- 3
- 4