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

Refactor the blocktree storage #11773

Closed
88250 opened this issue Jun 20, 2024 · 28 comments
Closed

Refactor the blocktree storage #11773

88250 opened this issue Jun 20, 2024 · 28 comments
Assignees
Labels
Milestone

Comments

@88250
Copy link
Member

88250 commented Jun 20, 2024

重构块树存储

动机

之前的块树存储结构是自己实现的文件存储,通过散列分散在 256 个 msgpack 文件中,启动时从这些文件加载块树到内存中,并每隔 5s 将变更的块树写入文件。

目前遇到的问题:

  • 数据量较大后,启动时读取块树结构较慢
  • 定时落盘存在风险,某些情况下可能会造成块树丢失

方案

从散列存储 msgpack 文件(工作空间/temp/blocktree/00-ff.msgpack)改为使用 SQLite 存储(工作空间/temp/blocktree.db)。

这样能解决前面提到的问题:

  • 启动时不再需要加载到内存
  • 通过数据库事务提升安全性(SQLite WAL)
@88250 88250 added the Refactor label Jun 20, 2024
@88250 88250 added this to the 3.1.0 milestone Jun 20, 2024
@88250 88250 self-assigned this Jun 20, 2024
@TCOTC
Copy link
Contributor

TCOTC commented Jun 20, 2024

能提高启动速度吗?

@wy16W2pIilK1xgqN
Copy link

有兴趣由 SQLite 切换到DuckDB。
刚刚准备发这个的提议,写了一堆,卡网卡没了😿

@88250
Copy link
Member Author

88250 commented Jun 20, 2024

能提高启动速度吗?

能,不过提升有限。这个改进主要还是提升稳定性,避免之前定时落盘的风险。

@Soltus
Copy link
Contributor

Soltus commented Jun 20, 2024

应该也能降低内核退出概率

@Temacc0531
Copy link

尝鲜了一下,启动速度快挺多🤩

@AvoidantPerDis
Copy link

AvoidantPerDis commented Jun 21, 2024

感觉启动是快了,日常编辑卡了不少,特别是刷闪卡的时候(1000张左右),怎么点都没反应。换到上一版dev就没事,其他条件都一样

@Soltus
Copy link
Contributor

Soltus commented Jun 21, 2024

安卓端好像反而更慢了

@88250
Copy link
Member Author

88250 commented Jun 21, 2024

@AvoidantPerDis 打开开发者工具看看是哪个请求卡,另外还需要提供一下内核日志。

@AvoidantPerDis
Copy link

@AvoidantPerDis 打开开发者工具看看是哪个请求卡,另外还需要提供一下内核日志。

recording
system-log.zip

@AvoidantPerDis
Copy link

卡了能有1分钟

@TCOTC
Copy link
Contributor

TCOTC commented Jun 21, 2024

@AvoidantPerDis 截图看一下具体是哪一条请求卡住了 贴着屏幕看了一下,好像都挺卡

@AvoidantPerDis
Copy link

@AvoidantPerDis 看一下是哪个请求卡住了

我刚刚关掉插件自查了一下,应该是番茄的闪卡优先级插件导致的,不过优先级我刚需

@TCOTC
Copy link
Contributor

TCOTC commented Jun 21, 2024

去仓库提个 issue 问问看

image

p.s. 原来可以在新页签打开 GIF 看

@88250
Copy link
Member Author

88250 commented Jun 21, 2024

@AvoidantPerDis 从块标打开属性面板看看 getBlockAttrs 的耗时。

另外,你之前那个录屏看不到最新请求,请求一直是最上面的:

image

@AvoidantPerDis
Copy link

@AvoidantPerDis 从块标打开属性面板看看 getBlockAttrs 的耗时。

另外,你之前那个录屏看不到最新请求,请求一直是最上面的:

image

image
属性面板秒开的

@AvoidantPerDis
Copy link

@IAliceBobI
Copy link

之前出现过读写接口都串行,后来把只限制了写接口。现在看起来好像读接口也串行了。

来个批量属性查询的接口可以缓解。 #11786

@AvoidantPerDis
Copy link

recording
这是上一版的速度,虽然也慢但是至少快一半
127.0.0.1 (2).zip

@AvoidantPerDis
Copy link

AvoidantPerDis commented Jun 21, 2024

这个应该也可以用到以后闪卡的不同flag排序

之前出现过读写接口都串行,后来把只限制了写接口。现在看起来好像读接口也串行了。

来个批量属性查询的接口可以缓解。 #11786

@88250
Copy link
Member Author

88250 commented Jun 21, 2024

改进了一些性能,等新版本发布后各位帮忙测试看看。

88250 added a commit that referenced this issue Jun 21, 2024
88250 added a commit that referenced this issue Jun 21, 2024
@AvoidantPerDis
Copy link

关联列搜索好像变卡了

@88250
Copy link
Member Author

88250 commented Jun 27, 2024

录屏看下请求耗时

@AvoidantPerDis
Copy link

录屏看下请求耗时

好像是最新dev的事,之前dev没有,而且整体都比较卡

@88250
Copy link
Member Author

88250 commented Jun 27, 2024

那应该不是 dev7 改动导致的,dev7 没有做过相关改动。

不过刚刚找到一个细节优化点,等 dev8 再测测,谢谢。

88250 added a commit that referenced this issue Jun 27, 2024
@AvoidantPerDis
Copy link

AvoidantPerDis commented Jun 27, 2024

那应该不是 dev7 改动导致的,dev7 没有做过相关改动。

不过刚刚找到一个细节优化点,等 dev8 再测测,谢谢。

感觉多页签的情况还是可以优化的,最近期末周开好几个大文档,都不敢开侧边的大纲面板了

@zxhd863943427
Copy link
Contributor

看了下blocktree.db的内容,似乎都是blocks里已有的内容?为啥要单独存一份?

@88250
Copy link
Member Author

88250 commented Jul 12, 2024 via email

@88250
Copy link
Member Author

88250 commented Jul 14, 2024

@zxhd863943427 对了,有个重要原因就是 blocks 是异步写入的,存在较大延迟,而 blocktree 要求即时写入,所以不能直接用 blocks 库表。

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

No branches or pull requests

8 participants