Talent Plan Rust课程总结

2024-03-28 15:32
文章标签 rust 总结 课程 plan talent

本文主要是介绍Talent Plan Rust课程总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先非常感谢PingCAP能组织一个非常专业的Rust课程,这对于Rust爱好者来说是一次非常好学习的机会,感谢PingCAP为Rust做出的贡献。该课程持续的做了一个月左右,感谢Brian Anderson大神提供优秀的实现供学员参考。

课程的目标是用Rust逐步实现一个BitCask数据库,详细请看https://github.com/pingcap/talent-plan/tree/master/courses/rust

Project-1

通过内存的KVStore学习了如下内容

  1. Rust项目工具cargo的作用以及cargo相关的命令
  2. clap库的使用
  3. 理解rust工程保组织结构
  4. 熟悉了标准库HashMap
Project-2

在project-1的基础上增加了error处理,以及数据持久化至硬盘。基本思路是内存的HashMap作为索引,Map的value中是键值对的文件id以及偏移地址和长度。

数据是序列化为json格式后以append log方式写,当旧的数据和删除的数据达到一定阈值,开启合并操作,合并操作是把当前内存索引中存在的数据写入新的文件中。

另外值得一提的是删除是写入一条记录来表示数据删除,同时删除该key索引。后续会执行Merge操作。

Project-3

本次实验主要增加了网络通信和基准测试的模块,对存储引擎抽象为KvsEngine Trait,实现分别是kvstore和sled wrapper。网络模块主要熟悉标准库的API以及通信的Message的定义。

通过的sled以及BW-tree的调研发现 bw-tree的实践并不能超越传统b+tree。在基准测试模块中是对单线程下的set和get进行测试,发现sled的flush会特别的慢,导致测试一直卡在set阶段,sled flush操作将会调用fsync同步整个page,慢是必然的。 sled会定时的执行刷盘操作,因此没必要每次set都进行flush操作。

Project-4

简单的说本次的实验就增加一个点,即所有的接口支持并发的调用,接下来解决的问题是什么数据共享,什么不共享,什么操作需要同步,什么不需要同步?

当然最简单办法是所有的操作都同步起来,顺序执行,但是性能存在问题。整体思路是所有的set和remove操作同步,读操做不同步。
索引以及不变的数据共享,读缓冲不共享,线程私有。

有个问题是索引在写线程中会修改,读线程需要根据索引来定位数据,如果`Arc来共享,那么写线程不能得到可变的引用,如果是用Arc<Mutex>则是同步的方式,直接pass,如果用Arc<RwLock>,还是存在读写互斥的情况,当然会比Mutex效率好点。采用线程安全的SkipListMap会更简单粗暴一些。

总结

其实看着简单的一个系统,做起来其实也会遇到大大小小的问题,整体的感受是Rust真的适合写底层的系统,即有c的力量感又有python的抽象能力,接下来一段时间会做dss课程,有兴趣的朋友可以互相交流学习。

https://github.com/TheLudlows/talent-plan-rs

这篇关于Talent Plan Rust课程总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/855994

相关文章

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

Rust 智能指针的使用详解

《Rust智能指针的使用详解》Rust智能指针是内存管理核心工具,本文就来详细的介绍一下Rust智能指针(Box、Rc、RefCell、Arc、Mutex、RwLock、Weak)的原理与使用场景,... 目录一、www.chinasem.cnRust 智能指针详解1、Box<T>:堆内存分配2、Rc<T>:

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta