在目前的插件开发流程中,我个人感知到的 json 存储方案主要缺点至少包括:
- 操作 API 设计较为复杂,因为是自定义的 json 结构,所以需要是另外定制的一套 API 进行交互,需要对多种数据结构进行兼容
- 读写 IO 问题:如果数据库体量一大,每次更新局部数据都得整个文件覆写一次,频繁操作容易产生大量磁盘 I/O 与 SSD 损耗。
- 而且失去了很多 sqlite 提供的功能... 例如:JOIN / GROUP BY / ORDER BY / 索引 / ACID 这些都得手动实现
当然,json 存储方案的优点也是有优点的,这些优点暂时是使用 sqlite 无法或者难以替代的:
- 数据同步:可以直接使用思源目前的数据同步架构进行同步,不需要更多的修改
- 数据明文:方便迁移导出什么的
数据明文先按下不表,因为可以在前端界面解析为 csv 导出暂时解决;数据同步这一块,社区也有很多探索和实践,例如 Litestream,rqlite 这些,不过肯定也是需要很大的工作量对目前的同步算法进行修改,但是带来的好处应该是显而易见的;甚至更激进一点,也可以直接 dump 整个数据库,同步 sql 文件,这样的话还能使用更成熟的例如 nocodb 等多维表实现,有成熟的看板,日历,甘特等各种视图;所以我一直不是很明白为什么思源数据库使用 json 存储数据而不是 sqlite 或者其他方案
因为对这个问题困惑已久,搜索了 github 上的所有 issue 似乎也没有提到这么做的原因,所以想和社区请教一下,是不是我有什么点没考虑到?感激不尽
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于