返回

文章详情

Markdown 数据库模式

Hacker News2026年8月27日 16:01

鲁弗斯·波洛克 · 开始于2023年,自那时以来一直在维护 — 历史 您的文件系统本身就是一个数据库。大多数工具只是不这样对待它。这是软件中一个最有用(同时也未被充分利用)模式的核心洞察:将一组 Markdown 文件视为数据库中的记录,而不是要渲染的文档。通过利用 Markdown 对"frontmatter"的支持,采用这种模式,您可以在自己的硬盘上拥有一个类似 Notion 的数据库体验,内容完全由您控制并访问。称之为 Markdown 数据库模式。 问题 内容管理的标准方法创造了一个错误的选择。一方面:CMS。您获得结构化数据——字段、类型、查询——但您的内容Lock在专有数据库中,依赖管理员界面,绑定到一个平台。散文是二等公民。另一方面:普通的 Markdown 文件。您获得自由——普通文本、版本控制、可以在任何编辑器中写作、可以在任何地方托管。但您放弃了查询能力。您不能问“显示自一月以来标记为研究的所有内容。”您无法过滤、排序或聚合。您拥有的是文档,而不是数据。 Markdown 数据库模式解决了这种折衷,并为您提供了两全其美的方案:带有元数据的 Markdown 文件,因此您拥有内容,您可以自由 estilo,并且拥有结构化的元数据。 模式 名称:Markdown 数据库模式 问题:您想要的内容既是可读的丰富文本,又是结构化的可查询数据——而不必将自己锁定到某个平台或牺牲简单的普通文件。 解决方案:将一组 Markdown 文件视为数据库。每个文件都是一个记录。Frontmatter 字段是列。目录是自然分组——表,如果您希望它们是的话。文件正文中嵌入的标签、链接和任务成为其他可查询的关系。 映射:文件系统 数据库 ────────────────────────────────── markdown 文件 → 记录 frontmatter 字段 → 列 目录 → 表 #tag → 标签关系 [[wikilink]] → 链接关系 - [ ] 任务 → 任务关系 后果:您获得了可移植性(普通文件可以放到任何地方),版本控制(git 在普通文本上工作得很好),栈独立性(无需框架),以及对您集合的完全查询能力。您放弃了规模(该模式不适合数百万条记录)和复杂的关系数据(这不是关系数据库的替代品)。这是一个轻量级数据库——在其范围内强大,并诚实地承认其局限性。 示例 一个电影笔记的文件夹:movies/ return-of-the-jedi.md a-new-hope.md the-empire-strikes-back.md 每个文件:--- year : 1983 director : Richard Marquand budget_m : 32.7 tags : [ sci - fi , space - opera ] --- # Return of the Jedi 很久以前,在一个遥远的星系……那个文件夹就是一个数据库。您只需要一个工具来读取结构层。将 MarkdownDB 指向它,您将获得文件和 file_tags 表以进行查询: SELECT * FROM files WHERE year < 1980 ; SELECT * FROM files WHERE director = 'George Lucas' ; SELECT * FROM file_tags WHERE tag = 'space-opera' ; 这不是一个实时演示——此页面上没有任何内容可以运行查询。关键是查询是可能的:索引文件夹一次,结构层就在那里。散文仍然是散文——可读的,可以在任何编辑器中写入,存储于 git。您不必选择。 从没有代码中看它 SQL 是一种进入的方式。更友好的方式是:在 Obsidian 中打开同一个文件夹并指向它。frontmatter 显示为可排序、可过滤的表格,无需查询语言。在这里,它是一小部分字符文件,呈现为一个表。 实用指南涵盖工具;逐步教程将在大约 20 分钟内从空文件夹构建一个。 您在哪里看到这种模式 一旦您命名它,您开始到处看到它。带有 frontmatter 的个人笔记文件夹就是一个 Markdown 数据库。每个页面都有状态和所有者字段的团队维基就是一个 Markdown 数据库。带有日期、标签和作者元数据的博客就是一个 Markdown 数据库——它只是可能还不知道。该模式自然适用于任何个体记录同时具有散文侧和数据侧的地方:博客和文章 个人知识库和数字花园 团队维基和内部文档 研究笔记和阅读清单 食谱收藏、旅行日志、项目回顾 范围最佳是大约一万个文件的集合。超过该范围,请使用真正的数据库。在该范围以下,这种模式可以以较低的复杂度提供几乎所有数据库的功能——并且没有任何锁定。 实现 它的实现方式比想象的要少得多。解析 frontmatter,遍历目录树,将结果写入 SQLite。一个周末项目。或者使用为此构建的工具。MarkdownDB 将一组 Markdown 文件索引到 SQLite,提取 frontmatter、标签、链接和任务,并为您提供 JavaScript API 来查询结果。三秒内从普通文本文件创建一个真正的可查询数据库——而无需放弃

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡