博客

为什么每个 Mythex 应用都有自己的数据库

当你在 Mythex 上构建的应用需要保存数据——注册信息、预约、订单——Mythex 会为该项目提供它自己的 Postgres 数据库。不是共享数据库中的一张表,也不是与别人并排的一个 schema:而是一个独立的数据库,按需创建,无人使用时休眠。下面说明我们为什么这样设计,以及它的代价。

你会得到什么

当你要求保存数据(「保存等候名单邮箱」「存储预约」)或使用 /database 命令时,Mythex 会:

  • 为项目创建一个专用的 Postgres 数据库(目前为 Postgres 17),
  • 将连接信息作为环境变量注入到你的工作区和已发布的应用中,因此它们从不出现在代码里,并且
  • 让智能体为你创建表,并读写数据。

实时预览和已发布的应用使用的是同一个数据库。它空闲 5 分钟后休眠,并在下一次查询时唤醒。新数据库起始规模较小,可以在负载下扩容,并设有上限,因此失控的查询不会无限制地增长。更多内容请参阅数据库文档。

为什么不用一个大的共享数据库?

一个共享数据库,用一列标明每行属于哪个应用,运行成本更低,操作也更简单。我们选择不这样做,原因有四:

1. 无需信任的隔离

AI 编写的代码会犯错。在共享数据库中,某个应用的查询里少写一个 WHERE app_id = …,就可能读取或覆盖另一位客户的数据。而每个应用一个数据库,就不存在任何其他客户的数据可以被触及——一个 bug 只会停留在它自己的应用之内。

2. 它是真正的 Postgres,而不是专有的封装层

你的应用使用标准的 Postgres 连接字符串与数据库通信。任何适用于 Postgres 的库、ORM 或工具,在这里都能工作。如果你导出项目到其他地方运行,它需要的是一个 Postgres 数据库——每家托管服务商都提供的东西——而不是某个 Mythex 专有的 API。

3. 每个应用可以按需要设计结构

一个应用需要一张 bookings 表,并在时间段上设置唯一约束;另一个应用则需要对商品进行全文搜索。有了各自独立的数据库,每个应用的 schema 和迁移都由它自己负责。没有什么需要去迁就一个最低公约数式的设计。

4. 成本随使用量而定

由于每个数据库各自休眠,无人使用的应用几乎没有成本,而繁忙应用的成本则体现为它自己的一项。已发布应用的数据库用量,是根据数据库实际测量的用量计费的——计费方式见此。

权衡

这种设计并非没有代价:

  • 冷启动。 休眠的数据库在一段安静时间后的第一次查询时,需要一点时间唤醒。对大多数应用来说,这几乎察觉不到;但对于必须在任何时间都即时响应的应用来说,这是需要考虑的因素。
  • 醒着时的成本。 只要有东西在查询,数据库就保持唤醒。一个每隔几秒就轮询数据库的应用,会让它全天候保持唤醒,成本也比按需查询的应用更高。如果你的用量比预期高,通常就是这个原因——可以让 AI 停止轮询,改为在需要时再加载数据。
  • 我们这边的运维工作更多。 创建、跟踪和清理成千上万个数据库,比管理一个数据库要费力得多。这是我们需要承担的问题,而不是你的。

如果你是数据库新手

数据库是应用保存其需要「记住」的内容的地方。如果这个概念对你来说还很陌生,可以先阅读什么是数据库和什么是 Postgres。当你准备好构建一个需要存储数据的应用时,如何用 AI 构建应用会讲解如何添加数据库。

Mythex · Pricing · 用 AI 构建任何东西 · 网站和应用模板 · Mythex 对比 · AI 应用构建术语表 · 免费的 AI 应用构建工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 繁體中文(香港) 繁體中文(台灣)