Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v0.13.2 release plan #403

Open
8 of 15 tasks
elliotchenzichang opened this issue Aug 4, 2023 · 18 comments
Open
8 of 15 tasks

v0.13.2 release plan #403

elliotchenzichang opened this issue Aug 4, 2023 · 18 comments
Assignees
Labels
good first issue Good for newcomers

Comments

@elliotchenzichang
Copy link
Member

elliotchenzichang commented Aug 4, 2023

简单任务

上手型任务

  • 继续重构测试用例。目前 db_test.go 已经完成了重构,但其它的db相关的测试仍然会用到 db_test.go 里用到的全局变量,可以按照 db_test.go 的方式重构其它测试用例。可以参照这个 pr 的方式来重构:test: rebuild unit tests in db_test.go(issue#374, task 4) #375 。以下这些文件可以一个一个领,因为任务量都比较大。

  • 这个方法应该没有必要存在的,ErrWhenBuildListIdx,在调用的地方直接用erroes.Wrap 包装一下应该就好。或者有别的方法也可以实践一下,这个任务的目的是去掉这个冗余的方法。@TremblingV5

image
  • 将所有索引放到 index.go 中的 index 结构体中,提供统一的接口来管理,可以使得代码结构更加清晰,调用更方便。如下图所示,当前 ListIdx 是已经放到 index 结构体中了,剩下还有几种索引都可以放到里面来,再实现对应的方法。@G-XD
image
  • 目前删除 Bucket 的方式是需要用户手动传入数据结构的类型,来删除对应的 Bucket。可以封装一些方法让用户可以直接调用来删除 Bucket,而不需要传入数据结构类型。 @elliotchenzichang
  • 我们要开始做error的管理,希望可以把和逻辑代码耦合在一个文件中的error迁移到一个单独放error的地方,下面这部分error定义在tx.go里面,希望可以迁移到一个新文件,比如,tx_err.go. @elliotchenzichang
image
  • 这个方法参数太多了,可以把这些参数都封装进一个结构体里面,这样代码看起来会优雅许多,也方便对这些参数做统一的校验。
image

进阶型任务

  • 重构部分代码,像下面这部分代码,其实很多地方都有类似的调用,直接tx.db.bucket。。。这样的的方式不够优雅,希望可以寻找一种优雅的方式重构类似这种代码。
image
  • 实现Hint FIle。 当前重启逻辑是把所有数据都读进来构建索引,其实重启直关注key,并不关注value的情况,论文中有提到一种Hintfile的文件,也就是merge只写入key和相关信息,不写入value。。这样可以节省后面重启的时候读取value的开销。目前nutsdb并没有实现这个功能。可以实现一下,当然也是开放配置给用户是否开启。默认开启即可。 @damotiansheng

  • 现在事务提交的时候,会在事务最后一条数据记录上标记事务提交状态,其实可以单独写一条数据表明某个事物已经提交了,即一条单独的 Commit 日志。另外也可以单独在写提交事务开始的时候写一条记录说明该记录已经开始,即一条 Begin 日志。这样会优雅一些。@bigboss2063

  • 提供一个最大数据量的配置,可以统计当前内存中的 Record 有多少条,方便对内存占用有要求的用户进行配置,到达阈值报错给用户停止写入。如何设置最大内存大小或减少内存消耗? #239 @damotiansheng

探究性任务 (探究性任务是学习探究项目一些性能优化方向的。学习为主,不强制有任何结果。当然可以把学习结果分享出来。不会指派给任何人,大家都可以一起学习。)

  1. https://github.com/dolthub/swiss 最近发现了这个项目,swissmap我记得是rust标准库map的实现,比go标准库的map相对性能好一些,另外可以省一些内存,在nutsdb内部有一些数据结构的索引都适用map实现的,这个可以研究一下看看可不可以用这个swissmap替换替换。PS,文章。https://www.dolthub.com/blog/2023-03-28-swiss-map/
@elliotchenzichang elliotchenzichang changed the title v0.13.0 release plan v0.13.2 release plan Aug 4, 2023
@damotiansheng
Copy link
Collaborator

damotiansheng commented Aug 17, 2023

 实现Hint File,这个意思是自动merge时写新的数据文件的同时也写hint file(只写key和相关信息)吗,启动时只读取这个hint file而不是从所有数据文件读取,写入数据的同时也写hint file(根据大小自动轮转),hint file相当于是一个去掉了value的索引,论文是指哪个论文的,想尝试下这个任务

@elliotchenzichang
Copy link
Member Author

实现Hint File,这个意思是自动merge时写新的数据文件的同时也写hint file(只写key和相关信息)吗,启动时只读取这个hint file而不是从所有数据文件读取,写入数据的同时也写hint file(根据大小自动轮转),hint file相当于是一个去掉了value的索引,论文是指哪个论文的,想尝试下这个任务

我先把这个任务归到你下面,论文是这个 https://riak.com/assets/bitcask-intro.pdf , 可以先看看, 了解了解。

@bigboss2063
Copy link
Member

实现Hint File,这个意思是自动merge时写新的数据文件的同时也写hint file(只写key和相关信息)吗,启动时只读取这个hint file而不是从所有数据文件读取,写入数据的同时也写hint file(根据大小自动轮转),hint file相当于是一个去掉了value的索引,论文是指哪个论文的,想尝试下这个任务

对的,不用读 value 来加快启动速度。但是我想了一下这个给应该只能在第二种模式启动的时候有用?

@damotiansheng
Copy link
Collaborator

damotiansheng commented Aug 17, 2023 via email

@TremblingV5
Copy link
Contributor

我想要上手任务的前3个 : )

@bigboss2063
Copy link
Member

我想要上手任务的前3个 : )

可以先选一个分配给你,给其他小伙伴也留点机会,做完了可以再过来认领,任务列表也会更新😁

@TremblingV5
Copy link
Contributor

我想要上手任务的前3个 : )

可以先选一个分配给你,给其他小伙伴也留点机会,做完了可以再过来认领,任务列表也会更新😁

那我先选ErrWhenBuildListIdx这个吧

@bigboss2063
Copy link
Member

我想要上手任务的前3个 : )

可以先选一个分配给你,给其他小伙伴也留点机会,做完了可以再过来认领,任务列表也会更新😁

那我先选ErrWhenBuildListIdx这个吧

分配给你了

@RuiHuaLiu2023
Copy link
Contributor

单独写一条数据表明某个事物已经提交 这个任务请给我

@G-XD
Copy link
Contributor

G-XD commented Aug 21, 2023

我想认领重构tx_set_test.go任务

@bigboss2063
Copy link
Member

我想认领重构tx_set_test.go任务

好的,分配给你了

@bigboss2063
Copy link
Member

单独写一条数据表明某个事物已经提交 这个任务请给我

好的,分配给你了。做的时候可以注意一下启动 db 的 open 函数那边的逻辑 😁

@G-XD
Copy link
Contributor

G-XD commented Aug 23, 2023

我想认领重构tx_bucket_test.go任务 @bigboss2063

@bigboss2063
Copy link
Member

我想认领重构tx_bucket_test.go任务 @bigboss2063

好的

@TremblingV5
Copy link
Contributor

想认领一个tx_list_test.go @bigboss2063

@bigboss2063
Copy link
Member

想认领一个tx_list_test.go @bigboss2063

好的,分配给你了😁

@G-XD
Copy link
Contributor

G-XD commented Aug 31, 2023

将所有索引放到 index.go 中的 index 结构体中,提供统一的接口来管理,可以使得代码结构更加清晰,调用更方便。如下图所示,当前 ListIdx 是已经放到 index 结构体中了,剩下还有几种索引都可以放到里面来,再实现对应的方法。

我想认领这个任务,可以使用泛型进行重构吗?

@bigboss2063
Copy link
Member

将所有索引放到 index.go 中的 index 结构体中,提供统一的接口来管理,可以使得代码结构更加清晰,调用更方便。如下图所示,当前 ListIdx 是已经放到 index 结构体中了,剩下还有几种索引都可以放到里面来,再实现对应的方法。

我想认领这个任务,可以使用泛型进行重构吗?

可以说一下具体做法吗

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
good first issue Good for newcomers
Projects
None yet
Development

No branches or pull requests

6 participants