riff icon indicating copy to clipboard operation
riff copied to clipboard

重构数据结构,并使用 sqlite 进行查询

Open zxhd863943427 opened this issue 1 year ago • 15 comments

该提交主要完成下面的工作:

  1. 重构了 cardsource、card 的结构
  2. 增加 history 和 reviewLog 结构,以满足撤回和导出复习历史的需要。
  3. 改为使用内存级sqlite进行 crud ,保存时导出为json。
  4. 目前已完成部分原有api,仍有一部分接口等待实现(另外感觉使用 sqlite 进行 CRUD 后一部分接口似乎不需要专门实现了?)

数据结构具体看代码,在 2万 cardSource 、10万 card 的性能如下所示:

图片

其中

task init card and cardsource use time :29.8242217s

是测试生成待插入卡片的耗时。总体而言,我觉得足以满足闪卡系统的使用需求。

请 @88250 看一下这样做是否可以接受。

另外, 为了快速开发,使用了 modernc.org/sqlite (无cgo,提高打包速度)和 xorm.io/xorm (辅助CRUD),如果可行,可以替换回 kernel 使用的 github.com/mattn/go-sqlite3 并逐步去除 xorm的使用。

zxhd863943427 avatar Jul 22 '24 11:07 zxhd863943427

Z佬666!静待D大旅游归来!

Jiangshuon avatar Jul 23 '24 14:07 Jiangshuon

和 https://github.com/siyuan-note/riff/pull/6 的关系是?

88250 avatar Jul 24 '24 01:07 88250

复用了部分数据结构,但基本相当于重写,因为我感觉一些组合查询要求使用原来的方法很难实现。

zxhd863943427 avatar Jul 24 '24 01:07 zxhd863943427

我更改了review的接口,使得它跟旧版更为相似。缺点是:

  1. reiview会使用更长时间。
  2. 撤回并重新复习的设计会更复杂一点。

不过我觉得批量复习的场景还是少见的,10万张卡片总用时16秒,相当于每张卡片0.16毫秒,性能再差几倍也不是太大问题。 之前的测试: 图片 现在的测试: 图片

当前的接口:

Review(cardID string, rating Rating)

zxhd863943427 avatar Jul 25 '24 13:07 zxhd863943427

当前版本增加了缓存,极大提升了查询性能和一般情况下的保存性能,可以在在600ms内返回10万卡片量级的结果。借用缓存也提升了 review 的性能,使其达到 api 修改前的速度。

图片

zxhd863943427 avatar Jul 30 '24 11:07 zxhd863943427

麻烦抽空解决一下冲突。

88250 avatar Sep 12 '24 07:09 88250

@88250 终于开始了!d大,大概还有几个版本才会进入3.2.0呀

Jiangshuon avatar Sep 12 '24 09:09 Jiangshuon

@Jiangshuon 争取今年年内吧。

88250 avatar Sep 12 '24 09:09 88250

麻烦抽空解决一下冲突。

api变化有点大,git自动合并扑街了,我需要抽时间看看。

zxhd863943427 avatar Sep 14 '24 15:09 zxhd863943427

@88250 测试dejavu的时候尝试了下跟sqlite的兼容性,发现情况如下:

在使用sqlite.db储存时,在写入的情况下,开启wal模式后,只要不读shm、wal就没多大问题。journal比较麻烦一点,写入太快了,在持续写入情况下,建立了快照后文件就更新了。在读的情况下,都没啥问题。所以sqlite作为储存方式对于dejavu是可行的,只不过最好在写入的时候获取filelock的锁。

zxhd863943427 avatar Sep 21 '24 16:09 zxhd863943427

dejavu 不考虑改数据库,用文件系统更好一些。

88250 avatar Sep 21 '24 17:09 88250

@88250 不是 dejavu 自己使用数据库,而是 riff 或者其他思源的组件可以考虑使用数据库进行数据储存,这不会造成问题。

zxhd863943427 avatar Sep 22 '24 01:09 zxhd863943427

具体是什么组件,这个要单独分析可行性。

88250 avatar Sep 22 '24 01:09 88250

看了一下,感觉riff和dataview都是可以用sqlite储存的,riff我觉得可以尝试一下,dataview就以后再说吧。

zxhd863943427 avatar Sep 22 '24 03:09 zxhd863943427

最近有什么进展消息吗?

kx1356 avatar Oct 25 '24 04:10 kx1356