使用Electric同步前后端数据

前后端数据同步

后端

后端使用 PostgreSQL 数据库存储数据,通过 RESTful API 提供数据接口。 并开启 sse 连接 用于实时数据推送。

前端

electric.ax/docs/sync/a...

前端使用 Electric 实现本地数据的存储和管理,通过 RESTful API 获取后端数据,可通过 sse 连接接收实时数据推送。 前端使用的Electric库:@electric-sql/client 主要会用到 Shape、ShapeStream

ts 复制代码
import { Shape, ShapeStream } from '@electric-sql/client'

export interface IElectricShapeOption {
  authorization: string
  table: string
  where: string
  subscribe?: boolean
  columns?: string[]
}

export const createShapeStreamOptions = (option: IElectricShapeOption) => {
  const { subscribe = true } = option
  return {
    // 后端接口地址
    url: `${import.meta.env.VITE_APP_API_BASEURL}api/v1/shape`,
    headers: {
      Authorization: option.authorization,
    },
    params: {
      table: option.table, // 同步的表名
      where: option.where, // 同步的条件
      columns: option.columns, // 需要同步的列,不设置就是同步所有的 设置了就只同步指定的列
    },
    subscribe, // 是否订阅实时数据推送,默认为 true
    liveSse: true, // 是否使用 sse 连接,默认为 true 开启 sse 连接后会自动处理连接断开和重连逻辑
  }
}

async function useElectricShape<T>(option: IElectricShapeOption) {
  const rows = ref<T[]>()

  const stream = new ShapeStream(createShapeStreamOptions(option))
  const shape = new Shape(stream)
  rows.value = await shape.rows as T[]

  shape.subscribe((callback) => {
    rows.value = callback.rows as T[]
  })

  const destroy = async () => {
    shape.unsubscribeAll()
  }

  return { rows, destroy }
}

为什么选择 Electric

  • 实时数据同步:通过 sse 连接实现后端数据的实时推送
  • 本地数据管理:提供 Shape 和 ShapeStream 方便前端管理本地数据
  • 易用性:提供简单的 API 供前端使用,减少开发复杂度

实际应用场景

  • CRM 系统:客户数据的实时同步和管理
  • 电商平台:订单数据的实时同步和管理
  • 数据分析平台:数据的实时同步和分析

存在的问题

  • 数据量较大时可能会有性能问题,需要合理设计数据同步的条件和频率

优化方案

  • 数据懒加载
    • 对于数据量大的列,可以在需要时才调用api懒加载,而不是一开始就同步所有数据
相关推荐
bugcome_com15 小时前
JWT 知识小课堂:从入门到精通,一文吃透 JSON Web Token
前端·json
To_OC15 小时前
写了三天 Next.js,我的 React 世界观被拆了又装回去
前端·全栈·next.js
独泪了无痕15 小时前
viewer.js 安装与配置指南:实现图片预览功能
前端·vue.js
Fluxart.ai17 小时前
电商商品图审核怎么自动化?规则引擎、人工复核与发布门禁
java·前端·自动化
why技术18 小时前
AI 写的文章,可能都带着手敲一遍都去不掉的“隐形水印”。
前端·人工智能·后端
愚公搬代码18 小时前
【愚公系列】《Android应用案例开发大全》016-LBS类应用掌上杭州(辅助工具类的开发)
android·前端
CodeSheep18 小时前
又一个华为天才少年,离职了!
前端·后端·程序员
kyriewen18 小时前
面试官说"打开你的AI工具"——我才发现,他考的根本不是写代码
前端·人工智能·面试
IT_陈寒19 小时前
Vue的双向绑定把我坑惨了,原来这个场景不能用
前端·人工智能·后端
hunterandroid20 小时前
[Android 从零到一] Compose LazyColumn 性能优化:key、稳定性与重组治理
android·前端