 Curve 分布式存储设计Curve 分布式存储设计 程义 — Curve Maintainer XAgenda 第二 第三 第四 第一 Curve的由来 Curve的设计目标 Curve块存储 和 Curve文件存储 Curve社区Curve的由来 1. 代码复杂/代码量大 2. 运维难度高 3. 无法满足高的性能需求Curve的设计目标 1. Curve云原生软件定义存储 2. Curve块存储 Curve块存储 3. Curve文件存储 4. 高性能,易运维,云原生Curve块存储 1. 高性能分布式共享数据库场景 2. Curve块存储提供底层分布式共享存储 3. Polardb for PostgreSQL提供上层高性能数 据库服务 4. 性能测试 1. benchmarkSQL 每分钟事务数提升39% 2. pgbench 延迟降低21% TPS提升26% 研究现状Curve块存储 研究现状Curve块存储 1. 分布式块存储服务 2. KVM块存储服务 3. iSCSI协议 4. 容器云块存储(CSI) 应用场景Curve块存储 1. 高可用性/高可靠性 (易运维) 2. RAFT一致性协议 3. CopySet分配算法 4. 拓扑结构 5. 高性能 6. chunkfilepool (降低写放大) 7. data stripe (增大并发) 8. zerocopy0 码力 | 20 页 | 4.13 MB | 6 月前3 Curve 分布式存储设计Curve 分布式存储设计 程义 — Curve Maintainer XAgenda 第二 第三 第四 第一 Curve的由来 Curve的设计目标 Curve块存储 和 Curve文件存储 Curve社区Curve的由来 1. 代码复杂/代码量大 2. 运维难度高 3. 无法满足高的性能需求Curve的设计目标 1. Curve云原生软件定义存储 2. Curve块存储 Curve块存储 3. Curve文件存储 4. 高性能,易运维,云原生Curve块存储 1. 高性能分布式共享数据库场景 2. Curve块存储提供底层分布式共享存储 3. Polardb for PostgreSQL提供上层高性能数 据库服务 4. 性能测试 1. benchmarkSQL 每分钟事务数提升39% 2. pgbench 延迟降低21% TPS提升26% 研究现状Curve块存储 研究现状Curve块存储 1. 分布式块存储服务 2. KVM块存储服务 3. iSCSI协议 4. 容器云块存储(CSI) 应用场景Curve块存储 1. 高可用性/高可靠性 (易运维) 2. RAFT一致性协议 3. CopySet分配算法 4. 拓扑结构 5. 高性能 6. chunkfilepool (降低写放大) 7. data stripe (增大并发) 8. zerocopy0 码力 | 20 页 | 4.13 MB | 6 月前3
 Raft在Curve存储中的工程实践分布式存储系统,支持 块存储 和 文件存储 2018~2021 Curve块存储 2021~2022 Curve文件存储 • 基于Openstack构建云计算平台 • 底层存储使用Ceph块存储 • 稳定性挑战 • 算力平台kubernetes的迅速发展 • AI/大数据业务的快速增长 • 存储使用Ceph文件存储/HDFS • 成本/性能挑战 Curve块存储和文件存储均采用raft协议整体架构 对接OpenStack平台为云主机提供高性能块 存储服务 • 对接Kubernetes为其提供RWO、RWX等类 型的持久化存储卷 • 对接PolarFS作为云原生数据库的高性能存储 底座,完美支持云原生数据库的存算分离架 构 • Curve作为云存储中间件使用S3兼容的对象 存储作为数据存储引擎,为公有云用户提供 高性价比的共享文件存储 • 支持在物理机上挂载使用块设备或FUSE文件 致已经被提交,系统切换到新的配置(new)。RAFT协议简介 日志压缩 • 日志会不断增长,占用空间 • 采用快照的方式压缩日志 • 在某个时间点,整个系统的状态都以快照的形式写入 到稳定的持久化存储中 • 完成一次快照之后,删除时间点之前的所有日志和快 照。BRAFT简介 • raft协议提出之后,涌现出了非常多的实现,比如etcd,braft,tikv等。 • braft是raft的一0 码力 | 29 页 | 2.20 MB | 6 月前3 Raft在Curve存储中的工程实践分布式存储系统,支持 块存储 和 文件存储 2018~2021 Curve块存储 2021~2022 Curve文件存储 • 基于Openstack构建云计算平台 • 底层存储使用Ceph块存储 • 稳定性挑战 • 算力平台kubernetes的迅速发展 • AI/大数据业务的快速增长 • 存储使用Ceph文件存储/HDFS • 成本/性能挑战 Curve块存储和文件存储均采用raft协议整体架构 对接OpenStack平台为云主机提供高性能块 存储服务 • 对接Kubernetes为其提供RWO、RWX等类 型的持久化存储卷 • 对接PolarFS作为云原生数据库的高性能存储 底座,完美支持云原生数据库的存算分离架 构 • Curve作为云存储中间件使用S3兼容的对象 存储作为数据存储引擎,为公有云用户提供 高性价比的共享文件存储 • 支持在物理机上挂载使用块设备或FUSE文件 致已经被提交,系统切换到新的配置(new)。RAFT协议简介 日志压缩 • 日志会不断增长,占用空间 • 采用快照的方式压缩日志 • 在某个时间点,整个系统的状态都以快照的形式写入 到稳定的持久化存储中 • 完成一次快照之后,删除时间点之前的所有日志和快 照。BRAFT简介 • raft协议提出之后,涌现出了非常多的实现,比如etcd,braft,tikv等。 • braft是raft的一0 码力 | 29 页 | 2.20 MB | 6 月前3
 新一代云原生分布式存储新一代云原生分布式存储—Curve 上 李小翠 网易数帆存储团队分布式存储介绍 01 存储的发展 | 分布式存储的分类 | 分布式存储的要素 02 03 04 Ceph 架构简介 | 场景介绍 | 使用中的问题 Curve 架构简介 | 数据对比 | 应用情况 FAQ 答疑存储的发展 互联网时代,数据大爆炸 大型主机 成本高 单点问题 扩容困难 各存储设备通过网络互联 各存储设备通过网络互联 大规模 弹性扩容 底层构建在分布式存储之上 云的概念 成本:共用基础设施 弹性:随意扩缩容 速度:更快的构建发布业务 底层构建在分布式存储之上 云原生的概念: 易用性:跨平台,超融合,弹性 小型主机 容量有限分布式存储的分类 按照各种应用场景所需的存储接口分类 对象 存储 文件 存储 块存储 接口为简单的 Get、PUT、DEL 和其他扩展 通常意义是支持 对指定地址空间进行随机读写 传统意义的块存储:磁盘分布式存储的要素 如何构建分布式文件系统? 以分布式块存储为例。 •提供大容量的块设备 •可以在指定地址空间内随机读写 write(offset, len) •服务质量要求:数据不能丢、服务随时可用、弹性扩缩容 要什么 •成百上千台存储节点 •磁盘故障、机器故障、网络故障概率性发生 有什么 分布式存储系统需要满足接口需求,并且有持续监控、错误检测、容错与自动恢复的能力0 码力 | 29 页 | 2.46 MB | 6 月前3 新一代云原生分布式存储新一代云原生分布式存储—Curve 上 李小翠 网易数帆存储团队分布式存储介绍 01 存储的发展 | 分布式存储的分类 | 分布式存储的要素 02 03 04 Ceph 架构简介 | 场景介绍 | 使用中的问题 Curve 架构简介 | 数据对比 | 应用情况 FAQ 答疑存储的发展 互联网时代,数据大爆炸 大型主机 成本高 单点问题 扩容困难 各存储设备通过网络互联 各存储设备通过网络互联 大规模 弹性扩容 底层构建在分布式存储之上 云的概念 成本:共用基础设施 弹性:随意扩缩容 速度:更快的构建发布业务 底层构建在分布式存储之上 云原生的概念: 易用性:跨平台,超融合,弹性 小型主机 容量有限分布式存储的分类 按照各种应用场景所需的存储接口分类 对象 存储 文件 存储 块存储 接口为简单的 Get、PUT、DEL 和其他扩展 通常意义是支持 对指定地址空间进行随机读写 传统意义的块存储:磁盘分布式存储的要素 如何构建分布式文件系统? 以分布式块存储为例。 •提供大容量的块设备 •可以在指定地址空间内随机读写 write(offset, len) •服务质量要求:数据不能丢、服务随时可用、弹性扩缩容 要什么 •成百上千台存储节点 •磁盘故障、机器故障、网络故障概率性发生 有什么 分布式存储系统需要满足接口需求,并且有持续监控、错误检测、容错与自动恢复的能力0 码力 | 29 页 | 2.46 MB | 6 月前3
 Nacos架构&原理
Nacos 寻址机制 56 Nacos 服务发现模块 63 Nacos 注册中心的设计原理 63 Nacos 注册中心服务数据模型 80 Nacos 健康检查机制 89 Nacos 配置管理模块 97 配置⼀致性模型 97 Nacos ⾼可⽤设计 100 Nacos 高可用设计 100 Nacos 鉴权插件 103 Nacos 账号权限体系 103 Nacos 认证机制 110 Nacos 开放性,设计和讨论保持社区互动和透明,方便大家协作。 架构图 整体架构分为用户层、业务层、内核层和插件,用户层主要解决用户使用的易用性问题,业务层主 要解决服务发现和配置管理的功能问题,内核层解决分布式系统⼀致性、存储、高可用等核心问题, 插件解决扩展性问题。 Nacos 架构 < 18 用户层  OpenAPI:暴露标准 Rest 风格 HTTP 接口,简单易用,方便多语言集成。  Console 19 > Nacos 架构 内核层  插件机制:实现三个模块可分可合能力,实现扩展点 SPI 机制,用于扩展自己公司定制。  事件机制:实现异步化事件通知,SDK 数据变化异步通知等逻辑,是 Nacos 高性能的关键部分。  日志模块:管理日志分类,日志级别,日志可移植性(尤其避免冲突),日志格式,异常码+帮 助文档。  回调机制:SDK 通知数据,通过统⼀的模式回调用户处理。接口和数据结构需要具备可扩展性。0 码力 | 326 页 | 12.83 MB | 9 月前3 Nacos架构&原理
Nacos 寻址机制 56 Nacos 服务发现模块 63 Nacos 注册中心的设计原理 63 Nacos 注册中心服务数据模型 80 Nacos 健康检查机制 89 Nacos 配置管理模块 97 配置⼀致性模型 97 Nacos ⾼可⽤设计 100 Nacos 高可用设计 100 Nacos 鉴权插件 103 Nacos 账号权限体系 103 Nacos 认证机制 110 Nacos 开放性,设计和讨论保持社区互动和透明,方便大家协作。 架构图 整体架构分为用户层、业务层、内核层和插件,用户层主要解决用户使用的易用性问题,业务层主 要解决服务发现和配置管理的功能问题,内核层解决分布式系统⼀致性、存储、高可用等核心问题, 插件解决扩展性问题。 Nacos 架构 < 18 用户层  OpenAPI:暴露标准 Rest 风格 HTTP 接口,简单易用,方便多语言集成。  Console 19 > Nacos 架构 内核层  插件机制:实现三个模块可分可合能力,实现扩展点 SPI 机制,用于扩展自己公司定制。  事件机制:实现异步化事件通知,SDK 数据变化异步通知等逻辑,是 Nacos 高性能的关键部分。  日志模块:管理日志分类,日志级别,日志可移植性(尤其避免冲突),日志格式,异常码+帮 助文档。  回调机制:SDK 通知数据,通过统⼀的模式回调用户处理。接口和数据结构需要具备可扩展性。0 码力 | 326 页 | 12.83 MB | 9 月前3
 TiDB v8.5 中文手册· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 103 4.1.2 TiDB 事务机制 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 624 6.3.3 预估存储空间· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · Open Protocol 中的 Row Changed Event 是 INSERT 事件还是 UPDATE 事件?· · · · · · · 954 7.8.19 TiCDC 占用多少 PD 的存储空间 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 955 70 码力 | 5095 页 | 104.54 MB | 10 月前3 TiDB v8.5 中文手册· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 103 4.1.2 TiDB 事务机制 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 624 6.3.3 预估存储空间· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · Open Protocol 中的 Row Changed Event 是 INSERT 事件还是 UPDATE 事件?· · · · · · · 954 7.8.19 TiCDC 占用多少 PD 的存储空间 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 955 70 码力 | 5095 页 | 104.54 MB | 10 月前3
 TiDB v8.4 中文手册· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 99 4.1.2 TiDB 事务机制 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 618 6.3.3 预估存储空间· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 1570 12.5.11 只读存储节点最佳实践 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·0 码力 | 5072 页 | 104.05 MB | 10 月前3 TiDB v8.4 中文手册· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 99 4.1.2 TiDB 事务机制 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 618 6.3.3 预估存储空间· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 1570 12.5.11 只读存储节点最佳实践 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·0 码力 | 5072 页 | 104.05 MB | 10 月前3
 TiDB v8.2 中文手册· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 83 4.1.2 TiDB 事务机制 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 560 6.3.3 预估存储空间· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 1502 12.5.11 只读存储节点最佳实践 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·0 码力 | 4987 页 | 102.91 MB | 10 月前3 TiDB v8.2 中文手册· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 83 4.1.2 TiDB 事务机制 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 560 6.3.3 预估存储空间· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 1502 12.5.11 只读存储节点最佳实践 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·0 码力 | 4987 页 | 102.91 MB | 10 月前3
 Hello 算法 1.2.0 简体中文 C# 版最终得到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概 具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 数据结构(data structure)是组织和存储数据的方式,涵盖数据内容、数据之间关系和数据操作方法,它具 有以下设计目标。 第 1 章 初识算法 www.hello‑algo.com 14 ‧ 空间占用尽量少,以节省计算机内存。 ‧ 数 数据结构与算法的关系 如图 1‑4 所示,数据结构与算法高度相关、紧密结合,具体表现在以下三个方面。 ‧ 数据结构是算法的基石。数据结构为算法提供了结构化存储的数据,以及操作数据的方法。 ‧ 算法为数据结构注入生命力。数据结构本身仅存储数据信息,结合算法才能解决特定问题。 ‧ 算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。 图 1‑4 数据结构与算法的关系0 码力 | 379 页 | 18.48 MB | 10 月前3 Hello 算法 1.2.0 简体中文 C# 版最终得到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概 具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 数据结构(data structure)是组织和存储数据的方式,涵盖数据内容、数据之间关系和数据操作方法,它具 有以下设计目标。 第 1 章 初识算法 www.hello‑algo.com 14 ‧ 空间占用尽量少,以节省计算机内存。 ‧ 数 数据结构与算法的关系 如图 1‑4 所示,数据结构与算法高度相关、紧密结合,具体表现在以下三个方面。 ‧ 数据结构是算法的基石。数据结构为算法提供了结构化存储的数据,以及操作数据的方法。 ‧ 算法为数据结构注入生命力。数据结构本身仅存储数据信息,结合算法才能解决特定问题。 ‧ 算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。 图 1‑4 数据结构与算法的关系0 码力 | 379 页 | 18.48 MB | 10 月前3
 Hello 算法 1.2.0 简体中文 Kotlin 版最终得到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概 具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 数据结构(data structure)是组织和存储数据的方式,涵盖数据内容、数据之间关系和数据操作方法,它具 有以下设计目标。 第 1 章 初识算法 www.hello‑algo.com 14 ‧ 空间占用尽量少,以节省计算机内存。 ‧ 数 数据结构与算法的关系 如图 1‑4 所示,数据结构与算法高度相关、紧密结合,具体表现在以下三个方面。 ‧ 数据结构是算法的基石。数据结构为算法提供了结构化存储的数据,以及操作数据的方法。 ‧ 算法为数据结构注入生命力。数据结构本身仅存储数据信息,结合算法才能解决特定问题。 ‧ 算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。 图 1‑4 数据结构与算法的关系0 码力 | 382 页 | 18.48 MB | 10 月前3 Hello 算法 1.2.0 简体中文 Kotlin 版最终得到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概 具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 数据结构(data structure)是组织和存储数据的方式,涵盖数据内容、数据之间关系和数据操作方法,它具 有以下设计目标。 第 1 章 初识算法 www.hello‑algo.com 14 ‧ 空间占用尽量少,以节省计算机内存。 ‧ 数 数据结构与算法的关系 如图 1‑4 所示,数据结构与算法高度相关、紧密结合,具体表现在以下三个方面。 ‧ 数据结构是算法的基石。数据结构为算法提供了结构化存储的数据,以及操作数据的方法。 ‧ 算法为数据结构注入生命力。数据结构本身仅存储数据信息,结合算法才能解决特定问题。 ‧ 算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。 图 1‑4 数据结构与算法的关系0 码力 | 382 页 | 18.48 MB | 10 月前3
 Hello 算法 1.2.0 简体中文 Swift 版最终得到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概 具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 数据结构(data structure)是组织和存储数据的方式,涵盖数据内容、数据之间关系和数据操作方法,它具 有以下设计目标。 第 1 章 初识算法 www.hello‑algo.com 14 ‧ 空间占用尽量少,以节省计算机内存。 ‧ 数 数据结构与算法的关系 如图 1‑4 所示,数据结构与算法高度相关、紧密结合,具体表现在以下三个方面。 ‧ 数据结构是算法的基石。数据结构为算法提供了结构化存储的数据,以及操作数据的方法。 ‧ 算法为数据结构注入生命力。数据结构本身仅存储数据信息,结合算法才能解决特定问题。 ‧ 算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。 图 1‑4 数据结构与算法的关系0 码力 | 379 页 | 18.48 MB | 10 月前3 Hello 算法 1.2.0 简体中文 Swift 版最终得到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概 具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 数据结构(data structure)是组织和存储数据的方式,涵盖数据内容、数据之间关系和数据操作方法,它具 有以下设计目标。 第 1 章 初识算法 www.hello‑algo.com 14 ‧ 空间占用尽量少,以节省计算机内存。 ‧ 数 数据结构与算法的关系 如图 1‑4 所示,数据结构与算法高度相关、紧密结合,具体表现在以下三个方面。 ‧ 数据结构是算法的基石。数据结构为算法提供了结构化存储的数据,以及操作数据的方法。 ‧ 算法为数据结构注入生命力。数据结构本身仅存储数据信息,结合算法才能解决特定问题。 ‧ 算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。 图 1‑4 数据结构与算法的关系0 码力 | 379 页 | 18.48 MB | 10 月前3
共 146 条
- 1
- 2
- 3
- 4
- 5
- 6
- 15














