对于非复制数据库,每个数据库
Posted: Tue Apr 22, 2025 8:57 am
D1 采用三层架构。首先是在客户 Worker 中运行的绑定 API 层。接下来是无状态 Worker 层,它根据数据库 ID 将请求路由到 Durable Object 层,该层负责处理 D1 背后的实际 SQL 操作。这与大多数使用 Cloudflare Worker 和 Durable Object 的应用程序的结构类似。
只有一个 Durable 对象。当用户的 Worker 使用 D1 绑定向数据库发出请求时,该请 巴林电报号码数据 求首先会被路由到与用户 Worker 运行在同一位置的 D1 Worker。D1 Worker 会找出哪个 D1 Durable 对象支持用户的 D1 数据库,并获取该 Durable 对象的 RPC 存根。Durable 对象路由层会找出 Durable 对象的位置,并与其建立 RPC 连接。最后,D1 Durable 对象会使用 Durable 对象 SQL API 代表用户的 Worker 处理查询。
在 Durable Objects SQL API 中,所有查询都会转到运行 Durable Object 的服务器本地磁盘上的 SQLite 数据库。Durable Objects以 WAL 模式运行 SQLite。在 WAL 模式下,每个写入查询都会附加到预写日志 (WAL)。当 SQLite 将条目附加到 WAL 文件的末尾时,名为存储中继服务领导者的特定于数据库的组件会同步将条目复制到位于不同数据中心的服务器上的 5 个持久性跟随者。当法定人数(5 个中至少 3 个)的持久性跟随者确认他们已安全地存储数据时,领导者将允许 SQLite 的写入查询提交并打开 Durable Object 的输出门,以便 Durable Object 可以响应请求。
我们实现的 WAL 模式使我们能够记录所有已提交的数据库更改的完整日志。这使得 SQLite 支持的 Durable Objects 和 D1 中的一些重要功能得以实。
只有一个 Durable 对象。当用户的 Worker 使用 D1 绑定向数据库发出请求时,该请 巴林电报号码数据 求首先会被路由到与用户 Worker 运行在同一位置的 D1 Worker。D1 Worker 会找出哪个 D1 Durable 对象支持用户的 D1 数据库,并获取该 Durable 对象的 RPC 存根。Durable 对象路由层会找出 Durable 对象的位置,并与其建立 RPC 连接。最后,D1 Durable 对象会使用 Durable 对象 SQL API 代表用户的 Worker 处理查询。
在 Durable Objects SQL API 中,所有查询都会转到运行 Durable Object 的服务器本地磁盘上的 SQLite 数据库。Durable Objects以 WAL 模式运行 SQLite。在 WAL 模式下,每个写入查询都会附加到预写日志 (WAL)。当 SQLite 将条目附加到 WAL 文件的末尾时,名为存储中继服务领导者的特定于数据库的组件会同步将条目复制到位于不同数据中心的服务器上的 5 个持久性跟随者。当法定人数(5 个中至少 3 个)的持久性跟随者确认他们已安全地存储数据时,领导者将允许 SQLite 的写入查询提交并打开 Durable Object 的输出门,以便 Durable Object 可以响应请求。
我们实现的 WAL 模式使我们能够记录所有已提交的数据库更改的完整日志。这使得 SQLite 支持的 Durable Objects 和 D1 中的一些重要功能得以实。