pg_crdt 项目教程

pg_crdt 项目教程

pg_crdtPOC CRDT support in Postgres项目地址:https://gitcode.com/gh_mirrors/pg/pg_crdt

1、项目介绍

pg_crdt 是一个实验性的扩展,旨在为 PostgreSQL 添加对冲突自由复制数据类型(CRDTs)的支持。CRDTs 是一种可以在多台计算机/节点之间安全复制和同步的去中心化数据结构,是协同编辑应用(如 Notion)的关键技术。

项目背景

CRDTs 允许在多个节点之间进行数据同步,而无需担心冲突。pg_crdt 项目的目标是评估是否可以利用 PostgreSQL 支持的 CRDT 和 Supabase 现有的实时 API 进行变更数据捕获,以在 Supabase 平台上启用协同应用的开发。

2、项目快速启动

安装步骤

  1. 克隆项目仓库

    git clone https://github.com/supabase/pg_crdt.git
    cd pg_crdt
    
  2. 使用 Docker 启动

    docker-compose up
    

    启动后,PostgreSQL 数据库将在以下地址可用:

    postgresql://postgres:password@localhost:5582/sdb
    
  3. 启用扩展

    在 PostgreSQL 中执行以下命令以启用扩展:

    CREATE EXTENSION pg_crdt;
    

示例代码

以下是一个简单的示例,展示如何在 PostgreSQL 中使用 pg_crdt 扩展:

-- 设置搜索路径
SET search_path TO public,crdt;

-- 创建一个新的 CRDT 文档
SELECT crdt_new_ydoc() AS new_doc;

-- 合并两个文档
SELECT crdt_merge(crdt_new_ydoc(), crdt_new_ydoc()) AS merged_doc;

3、应用案例和最佳实践

应用案例

pg_crdt 可以用于开发需要实时协同编辑的应用,如在线文档编辑器、共享白板等。例如,多个用户可以同时编辑同一个文档,而无需担心数据冲突。

最佳实践

  • 频繁更新的 CRDTs:对于频繁更新的 CRDTs,需要注意生成的 WAL(预写日志)和死元组(dead tuples)的数量。
  • 大型 CRDT 类型:大型 CRDT 类型在更新时会产生显著的序列化/反序列化开销。
  • 实时广播:使用 Supabase 的实时 API 广播数据库变更时,需要注意 WAL 包含完整的数据副本,因此小更新可能导致整个文档广播给所有协作者。

4、典型生态项目

Supabase

pg_crdt 是 Supabase 生态系统的一部分,Supabase 是一个开源的 Firebase 替代品,提供实时数据库、身份验证、存储等功能。通过结合 pg_crdt 和 Supabase 的实时 API,可以构建强大的协同应用。

Yjs/Yrs

pg_crdt 使用了 Rust 的 yrsautomerge 库,这些库提供了高效的 CRDT 实现。Yjs 是一个流行的 JavaScript 库,用于实现协同编辑功能。

pgx

pgx 是一个 Rust 框架,用于构建 PostgreSQL 扩展。pg_crdt 使用 pgx 框架来添加 PostgreSQL 原生 CRDT 支持。

通过这些生态项目的结合,可以构建出高效、可靠的协同应用。

pg_crdtPOC CRDT support in Postgres项目地址:https://gitcode.com/gh_mirrors/pg/pg_crdt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宫文琼Perfect

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值