使用 Sessions API 可以修复不一致问题。第一个写入查询再次由数据库主服务器处理,这次响应包含“ Bookmark 100 ”。会话对象将以透明的方式为您存储此书签。
后续的读取查询将像以前一样由数据库副本处理,但由于查询包含先前收到的“书签 100 ”,数据库副本将等待,直到其数据库副本至少更新为“书签 100 ”。只有当其数据库副本更新为最新状态后,才会处理读取查询并返回结果,其中包括副本的最新书签“书签 104 ”。
是“ Bookmark 104 ”,这与查询请求中传递的书签不同。如果在我们自己的客户端执行 巴哈马电报号码数据 的两个查询之间,其他客户端请求的写入操作也被复制到了数据库副本,则可能会发生这种情况。
启用读取复制
要开始使用 D1 读取复制:
更新您的 Worker,使其使用 D1 Sessions API 来告知 D1 哪些查询属于同一数据库会话。Sessions API 也适用于未启用读取复制的数据库,因此即使在启用副本之前也可以安全地发送此代码。以下是示例。
通过Cloudflare 仪表板> 选择 D1 数据库 > 设置为您的数据库启用副本。
D1 读取复制功能内置于 D1 中,您无需为副本支付额外的存储或计算成本。无论您是否启用副本,D1 的使用量都完全相同,具体取决于rows_read您rows_written的查询。与其他具有复制功能的传统数据库系统不同,您无需手动创建副本(包括它们的运行位置),也无需决定如何在主数据库和读取副本之间路由请求。Cloudflare 会在使用 Sessions API 时处理这些问题,同时确保顺序一致性。