新一代分布式高性能图数据库的构建 - 沈游人授、中国计算机学会前理事长,中国计算机系统结构 的学科带头人,我国高性能计算和存储系统等方面的 泰斗和先行者。 2021 年 3 月 25 日,海致科技与清华大学计算机科学与技术系共同建设高性能图计算院士专家工作站 。 高性能图计算是高性能计算、图计算两项技术融合产生的新的技术方向,满足人们对更大规模、更复 杂数据的实时处理和存储需求,是计算机领域竞争新战略制高点。 产学结合、协同创新,打造全球领先的国产自研图数据库 通过图嵌入将客户关系表示为低维向量,可以结合其 他客户行为特征进行机器学习训练 图卷积神经网络 • 对图结构数据进行卷积计算 • 通过已有的企业数据,通过 GCN 进行半监督学习和分 类,预测企业的违约概率 传统的关系型数据库的存储方式丢失了事物之间的关系信息 Relational Table Real World Multi-Context is Preserved with Graph Analytics Source: Database 支持弹性伸缩,有 效利用硬件资源,高可用,高 可靠,故障自愈,低成本运维 HTAP Hybrid Transactional/Analytical Processing ,高性能图计算引 擎,预置 20 余种图计算算法 ,可扩展的分析引擎支持更复 杂的数据挖掘和机器学习场景 MPP Massively Parallel Processing 架构,大规模集群 分布式存储及并行计 算,0 码力 | 38 页 | 24.68 MB | 1 年前3
基于 Rust Arrow Flight 的物联网和时序数据传输及转换工具 霍琳贺TDengine: 时序数据库 TDengine 是一款开源、云原生的时序数据库( Time Series Database ),专为物联网、工业互联网、金融、 IT 运维监控等场景设计并优化,具有极强的弹性伸缩能力。同时它还带有内建的缓存、流式计算、数据订阅等 系统功能,能大幅减少系统设计的复杂度,降低研发和运营成本,是一个极简的时序数据处理平台。 采用关系型数据库模型 需要建库、建表, 支持 • 无模式写入 • 缓存 • 流计算 • 数据订阅 • 集群、高可用 高可靠、线性扩展 + 专业技术服务 • 边云数据复制 • 跨云 / 异地数据复制 • 增量备份 • 多级存储 • 工业数据接入 全托管时序数据 管理云服务平台 • 全托管服务 • VPC 对等连接 • 多云部署( AWS/Azure/ GCP) CONTENTS 自 我 介 绍 T D e s X R u s t 使 用 taosX - 物联网数据接入问题 • 多种不同协议数据对接,开发复杂度高 • 模块之间关联性不高但模块组成复杂,可维护性差 • 大量设备大量数据归集存储,存储压力大 • 数据总线 / 消息队列消息接入,定制化程度要求高 • 数据业务逻辑自定义需求强 • 一定的实时数据分析能力 taosX - 功能路线图 集群运维 数据接入 流式处理 流式处理0 码力 | 29 页 | 2.26 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Rust 版最终得到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概 具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 数据结构(data structure)是组织和存储数据的方式,涵盖数据内容、数据之间关系和数据操作方法,它具 有以下设计目标。 第 1 章 初识算法 www.hello‑algo.com 14 ‧ 空间占用尽量少,以节省计算机内存。 ‧ 数 数据结构与算法的关系 如图 1‑4 所示,数据结构与算法高度相关、紧密结合,具体表现在以下三个方面。 ‧ 数据结构是算法的基石。数据结构为算法提供了结构化存储的数据,以及操作数据的方法。 ‧ 算法为数据结构注入生命力。数据结构本身仅存储数据信息,结合算法才能解决特定问题。 ‧ 算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。 图 1‑4 数据结构与算法的关系0 码力 | 387 页 | 18.51 MB | 10 月前3
Hello 算法 1.1.0 Rust版最终得到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概 具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 数据结构(data structure)是计算机中组织和存储数据的方式,具有以下设计目标。 ‧ 空间占用尽量少,以节省计算机内存。 第 1 章 初识算法 hello‑algo.com 14 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 数据结构与算法的关系 如图 1‑4 所示,数据结构与算法高度相关、紧密结合,具体表现在以下三个方面。 ‧ 数据结构是算法的基石。数据结构为算法提供了结构化存储的数据,以及操作数据的方法。 ‧ 算法是数据结构发挥作用的舞台。数据结构本身仅存储数据信息,结合算法才能解决特定问题。 ‧ 算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。 图 1‑4 数据结构与算法的关系0 码力 | 388 页 | 18.50 MB | 1 年前3
Hello 算法 1.0.0 Rust版最终得到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 � 如果你对数据结构、算法、数组和二分查找等概念仍感到一知半解,请继续往下阅读,本书将 具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 「数据结构 data structure」是计算机中组织和存储数据的方式,具有以下设计目标。 ‧ 空间占用尽量少,以节省计算机内存。 第 1 章 初识算法 hello‑algo.com 14 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 数据结构与算法的关系 如图 1‑4 所示,数据结构与算法高度相关、紧密结合,具体表现在以下三个方面。 ‧ 数据结构是算法的基石。数据结构为算法提供了结构化存储的数据,以及操作数据的方法。 ‧ 算法是数据结构发挥作用的舞台。数据结构本身仅存储数据信息,结合算法才能解决特定问题。 ‧ 算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。 图 1‑4 数据结构与算法的关系0 码力 | 383 页 | 17.61 MB | 1 年前3
Rust在Substrate 开发框架中的使用DHT ● 自驱动 ● 数据存储、索引 Chain-less 协议: ● IPFS ● Matrix ● BitTorrent 特点: ● DHT ● 自驱动 ● 数据存储、索引 Chain-less Vs blockchain 协议: ● Bitcoin ● Ethereum ● Polkadot 特点: ● 区块结构,链式存储 ● 激励机制 ● 数据交易 数据交易 特点: ● Gas 费用 ● 沙盒环境 ● 链上存储租赁 ● 状态回滚 Smart contract smart contract 特点: ● Gas 费用 ● 沙盒环境 ● 链上存储租赁 ● 状态回滚 Smart contract Vs application chain app chain特点: ● Runtime 安全有开发者完全负责 ● 获取链上所有状态 ● smart contracts staking slashing csprng governance dao parachains permissions Rust 编译为Wasm Wasm在链上存储 Rust 编译成本地可执行文件 RUNTIME Substrate Runtime Module Library 提供一系列的即插即用的功能,如 资产管理、共识、合约、自治等。 你也可以开发自己的Runtime组0 码力 | 37 页 | 967.22 KB | 1 年前3
Rust 程序设计语言 简体中文版 1.85.0println! 占位符打印值 除了位于结尾的右花括号,目前为止就只有这一行代码值得讨论一下了: println!("You guessed: {guess}"); 这行代码现在打印了存储用户输入的字符串。{} 这对大括号是一个占位符:把 {} 想象成小蟹 钳,可以夹住合适的值。当打印变量的值时,变量名可以写进大括号中。当打印表达式的执行 结果时,格式化字符串(format stri 与遮蔽的另一个区别是,当再次使用 let 时,实际上创建了一个新变量,我们可以改变值 的类型,并且复用这个名字。例如,假设程序请求用户输入空格字符来说明希望在文本之间显 示多少个空格,接下来我们想将输入存储成数字(多少个空格): 41/562Rust 程序设计语言 简体中文版 let spaces = " "; let spaces = spaces.len(); 第一个 spaces (无符号数)。这有点像在纸上书写数字:当需要考虑符号的时候,数字以加号或减号作为前 缀;然而,可以安全地假设为正数时,加号前缀通常省略。有符号数以二进制补码形式 (two’s complement representation) 存储。 每一个有符号的变体可以储存包含从 -(2n - 1) 到 2n - 1 - 1 在内的数字,这里 n 是变体使用的位 数。所以 i8 可以储存从 -(2⁷) 到 2⁷ - 1 在内的数字,也就是从0 码力 | 562 页 | 3.23 MB | 1 月前3
Rust 程序设计语言简体中文版guess) # .expect("Failed to read line"); # println!("You guessed: {guess}"); # } 这行代码现在打印了存储用户输入的字符串。里面的 {} 是预留在特定位置的占位符:把 {} 想象成小蟹钳,可以夹住合适的值。当打印变量的值时,变量名可以写进大括号中。当打印表 达式的执行结果时,格式化字符串(format 与隐藏的另一个区别是,当再次使用 let 时,实际上创建了一个新变量,我们可以改变 值的类型,并且复用这个名字。例如,假设程序请求用户输入空格字符来说明希望在文本之间 显示多少个空格,接下来我们想将输入存储成数字(多少个空格): # fn main() { let spaces = " "; let spaces = spaces.len(); # } 第一个 spaces 变量是字符串类型,第二个 (无符号数)。这有点像在纸上书写数字:当需要考虑符号的时候,数字以加号或减号作为前 缀;然而,可以安全地假设为正数时,加号前缀通常省略。有符号数以补码形式(two’s complement representation) 存储。 每一个有符号的变体可以储存包含从 -(2ⁿ ⁻ ¹) 到 2ⁿ ⁻ ¹ - 1 在内的数字,这里 n 是变体使用的位 数。所以 i8 可以储存从 -(2⁷) 到 2⁷ - 1 在内的数字,也就是从0 码力 | 600 页 | 12.99 MB | 1 年前3
使用Rust与ClickHouse构建高效可靠的日志系统• 为什么放弃 Loki • 资源占用过大 • 统计/计算能力比较弱 • 组件过多,排查问题比较困难 • 商业使用不友好的开源协议 • 为什么选择Mencius+ClickHouse • 存储计算与业务分离 • 计算/统计能力更强 • 资源占用更小,性能更好 • 更友好的开源协议 系统介绍 • 多种接入方式 • Agent • Client • 查询 • LogQL • OpenTSDB Mencius • 200M左右 • ClickHouse • 2G以下 • 接入端 • API Gateway • 日志服务(Mencius) • 存储(ClickHouse) 整体架构 • 协议层 • 处理层 • 计算层 • 存储层 系统实现 协议层 • 支持协议 • Loki • 写入 • Json/ProtoBuf • 查询 • LogQL • Log Queries … • Vector matching • 匹配两个Vector 存储层 • WAL • 移植LevelDB的 WAL • 定长的 Block • Batch 写入 ClickHouse • Flush Worker • 异步任务定时刷新 WAL • 清理策略 • Schema同步 • 转换SQL 存储层 • ClickHouse • 使用Array来保存 Labels0 码力 | 19 页 | 2.66 MB | 1 年前3
Comprehensive Rust(简体中文) 202412if they were all defined in an enum. • Rust 使用最小的空间来存储判标识。 – 如有必要,它会存储所需最小大小的整数 – 如果允许的变体值未涵盖所有位模式,则它将使用无效的位模式对判别标识进行编码(“小众 优化”)。例如,Option<&u8> 存储的要么是指向整数的指针,要么是 None 变体的 NULL 值。 – You can control the 程序通过以下两种方式分配内存: • 栈:局部变量的连续内存区域。 – 值在编译时具有已知的固定大小。 – 速度极快:只需移动一个栈指针。 – 易于管理:遵循函数调用规则。 – 优秀的内存局部性。 • 堆:函数调用之外的值的存储。 – 值具有动态大小,具体大小需在运行时确定。 – 比栈稍慢:需要向系统申请空间。 – 不保证内存局部性。 示例 Creating a String puts fixed-sized metadata - - - - -' `- - - - - - - - - - - - - - - -' • 指出 String 底层由 Vec 实现,因此它具有容量和长度,如果值可变,则可以通过在堆上重新分配 存储空间进行增长。 • 如果学员提出相关问题,你可以提及我们不仅能使用 [系统分配器] 在堆上分配底层内存,还能使用 Allocator API 实现自定义分配器 探索更多 We can inspect0 码力 | 359 页 | 1.33 MB | 10 月前3
共 21 条
- 1
- 2
- 3













