反向链接 Backlink 的实现机制讨论:如何在emacs中高效实现?

我目前能想到的实现方式如下:

  1. 解析文档,将连接关系存储到数据库 (sqlite等)
  2. 实时搜索
  3. 文档本身的存储结构原生支持

以我的理解,org-roam用的方式1,由于emacs是单线程,要解析的文件较大时效率较低;RoamResearch用的方式3,基于 Datomic 数据库构建,查询效率高,但是数据不好迁移。

好奇Obsidian、Logseq等其他基于Markdown的双链笔记是用的什么机制。主要是我的笔记条目有点多,org-roam-ui的local模式要比global模式有用很多:

我有多个较大的org文件,每次解析文档的时间都挺久。Backlink在我的应用场景中会挺有帮助,但是因为这个原因,一直没有用起来。感觉Obsidian等双链功能都很快,不确定是不是大部分人的笔记链接不多的原因,还是实现机制的问题。恳请指教!

2 个赞

Logseq实现了一个org mode解析器,解析之后存入datascript数据库。

感谢!所以:

  1. logseq的解析器与emacs中的解析器相比,性能如何?
  2. 是实时解析,还是空闲时后台处理?

性能肯定更好,解析完整性没验证过。

不存在实时解析的问题。对于logseq来说,orgmode只是一种笔记保存格式而已。导入、解析,后面就都在logseq里面操作,直到操作完成才导出来保存。