Skip to content
New issue

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

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

Already on GitHub? # to your account

[venus-sector-manager] 扩展可用数据库类型 #323

Closed
1 of 6 tasks
dtynn opened this issue Jul 12, 2022 · 3 comments · Fixed by #397
Closed
1 of 6 tasks

[venus-sector-manager] 扩展可用数据库类型 #323

dtynn opened this issue Jul 12, 2022 · 3 comments · Fixed by #397
Labels
enhancement New feature or request
Milestone

Comments

@dtynn
Copy link
Contributor

dtynn commented Jul 12, 2022

模块 / Components

  • venus-sector-manager
  • venus-worker
  • 工具链 / toolchains
  • 文档 / docs

描述 / Description

  • 基于其他类型数据库的组件实现
  • 数据迁移工具
@dtynn dtynn added the enhancement New feature or request label Jul 12, 2022
@dtynn dtynn added this to the v0.5.0 milestone Jul 12, 2022
@remakeZK
Copy link
Contributor

关于统一 wrapped store & 多类型 datastore 的对比

背景

目前 sector-manager 中对于不同类型的数据存放存在两种模式,它们分别是:

  • wrapped store : 通过对 Key 作前缀的包装,期望只注入一个 db 实例,包装由成多种 kv-store 供使用方调用。

  • datastore : 通过注入不同 db 实例,构造出不同的 kv-store,直接供使用方调用。

对比

db 层的比较:

  • 使用不同的 db 实例在使用外部数据库时可能存在配置麻烦的情况,但这个可以通过同一个 db,不同的 table/collection 解决。

  • 在性能上明显构造不同的 db 实例,将互相之间没有关系的数据分开存储对于 db 的增删改查更友好

  • 将数据放在同一个 db 中,在人工需要查询数据的时候更友好?(存疑)

编码层的比较:

  • 使用 wrapped store / 不同的 db 实例时 都需要进行代码的修改,wrapped store 需要添加新的 prefix。而不同的 db 则需要注入新的类型的 db,通过依赖注入系统帮助调用方构造 kvstore,需要改变的代码可见的会比使用 wrapped store 的多,且会改变依赖注入的代码

互相 migrate 的对比:

基于目前代码中存在两种混用的情况,统一化则需要进行 migrate

  • 从 wrapped store=》不同实例: wrapped store 可以直接撤去,需要将现有的几类 store 进行修改,包裹成使用原生 key 不行的时候,使用 wrapped key 进行查询。(将 wrapped 这个概念下一层到 db 层作兼容)。

  • 从 不同实例=》 wrapped store:目前几种 store 仍然需要注入(仍有可能会有查询落到这些 db 中),构造一个统一的实例,构造 wrapped store 中使用主 db 作为查询的第一层,目前几种 store 作为兼容。

  • 直接使用工具进行 migrate,这种方式代码会比较干净,但是需要额外的运维人力来做这件事,另外需要额外的编写工具。

总结

统一成任何一种目前都存在一些问题,不过基于代码层都会进行改造,而数据库层面使用多个实例这种方式(外部数据库使用 table/collection),对于数据库的性能和可维护性都比较亲和,倾向于将目前的代码统一成使用多个实例这种方式。

@remakeZK
Copy link
Contributor

@dtynn

@hunjixin hunjixin moved this to In Progress in venus-cluster Aug 15, 2022
@dtynn
Copy link
Contributor Author

dtynn commented Aug 15, 2022

建议使用根据用途区分多实例的方式,同时保持 prefix wrapper 的使用逻辑

Repository owner moved this from In Progress to Done in venus-cluster Sep 7, 2022
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
enhancement New feature or request
Projects
No open projects
Status: Done
Development

Successfully merging a pull request may close this issue.

2 participants