使用 Go 后端和 PostgreSQL 数据库处理 React 应用程序中的复杂状态同步

问题描述 投票:0回答:1

我正在开发一个 Web 应用程序,使用 React 作为前端,Go 作为后端语言,PostgreSQL 作为数据库。我遇到了一个具有挑战性的场景,涉及客户端和服务器之间复杂状态的同步。

该应用程序涉及管理一组动态的用户可定制小部件。每个小部件的状态包括可由用户更改的各种属性(如位置、大小、内容等)。该状态存储在 PostgreSQL 中。当尝试在 React 前端、Go 后端和 PostgreSQL 数据库之间有效同步这些状态更改以确保一致性和性能时,就会出现挑战。

以下是当前方法的概述:

  1. 前端(React):每个小部件的状态是使用React状态(useState和useContext用于全局状态)管理的。每次更改时,更新都会发送到后端。

  2. 后端(Go):接收状态更改并更新 PostgreSQL 数据库。它还需要处理来自不同用户的并发状态更新。

  3. 数据库 (PostgreSQL): 存储小部件状态。表模式旨在适应每个小部件的不同属性。

我正在寻找有关处理这种复杂状态同步的最佳实践或模式的建议。具体来说,我面临以下问题:

  1. 优化状态同步:如何最大限度地减少前端和后端之间的请求数量,同时确保状态是最新且一致的。

  2. 并发处理: Go 中有效管理多个用户并发更新的策略。

  3. 数据库架构设计:在 PostgreSQL 中设计灵活架构的最佳实践,可以适应小部件的不同状态。

使用此技术堆栈处理此类场景是否有既定的模式或实践?任何见解或资源将不胜感激。

这是React中widget状态管理的简化版本(供参考):

const [widgets, setWidgets] = useState([]);

const updateWidget = (widgetId, newProps) => {
  setWidgets(currentWidgets => 
    currentWidgets.map(widget => 
      widget.id === widgetId ? {...widget, ...newProps} : widget
    )
  );
  // Code to send update to backend
};

以及状态更新的 Go 处理程序(简化):

func UpdateWidgetState(w http.ResponseWriter, r *http.Request) {
    // Logic to parse request and update PostgreSQL database
}

鉴于此设置,如何提高此应用程序中状态同步的效率和一致性?

reactjs postgresql go web-applications state-management
1个回答
0
投票

为了能够做出决定,您应该提供一些数学(数字) 例如:

  • 读:写比例(例如:10:1)
  • 一些 TPS 估算
  • 用户数量
  • 一致性强? (我认为是的,是否应该通知用户其他用户所做的更新?)

您可以考虑的传输协议:WebSockets、SSE、REST + 一些缓存可以很好地工作(根据上述问题做出决定)

你的数据模型?是一个经典的关系数据模型,您应该对不同的数据库突变(不同的表)做出反应,或者是一个事件源,您有一个小部件表(集合),并且它仅附加,有效负载为 json 对象?

....

© www.soinside.com 2019 - 2024. All rights reserved.