【问题标题】:What is the best method to keep a unique identifier in sync between AngularJS and database?在 AngularJS 和数据库之间保持唯一标识符同步的最佳方法是什么?
【发布时间】:2017-05-29 19:07:24
【问题描述】:

我的 Angular/Node 应用程序显示用户事件的时间线。用户可以添加、编辑和删除事件。

添加新事件时,AngularJS 会将事件内容以 JSON 格式添加到时间线数组中,以便立即显示给用户。同时 AngularJS 调用一个 Node API 将事件插入数据库,在这个过程中数据库生成一个 event_id(使用自动增量)。

在 AngularJS 和数据库 (mysql) 之间保持 event_id 同步的最佳设计是什么?

想法:

  1. 我可以等待 API 返回 event_id 并将其插入 AngularJS 时间线数组。这里的问题是如果用户在 event_id 返回之前编辑事件,应用程序将不知道要更新哪个事件。

  2. 当添加新事件时,我可以在 AngularJS 端生成一个随机数 (temp_id),并在时间线数组中使用它,并通过 API 将其发送到数据库。这里的一个问题是跟踪两种类型的 ID:temp_id 和 event_id

这两种想法都有缺点。

有人可以提出更好的设计吗?

【问题讨论】:

  • 添加一个透明的屏幕覆盖以限制所有用户事件,直到从您的 Node API 收到响应为止?这可以与想法 1 一起实施。
  • 这两种方法都有一个很大的缺点 - 数据不一致。由于某些问题,事件可能根本没有保存在服务器中,或者用户可以尝试更改/删除未保存在服务器中的事件。因此,您需要使用 Dhruv Saxena 建议的方法,或者使用 1 和某种 UI 锁定事件,直到它在服务器中创建。

标签: mysql angularjs node.js api architecture


【解决方案1】:

这是我会考虑的一种方法:

使用一个随机的UUID 作为主键,保证跨客户端的唯一性。

对您的用户/客户端使用基于会话/用户的自动增量,这不是数据库中的唯一键。

让 Angular 给你的事件一个 temporary_id 和一个 event_number,然后在你的 API 响应创建的事件后更新 temporary_id

您可能需要在 Angular 应用程序中维护事件的状态,直到将其保存到数据库中。并且可能会阻止用户编辑/更新该事件,直到它被保存并且您的服务器响应。

【讨论】:

  • 比绍伊,好主意。我在想类似的事情。但是,您是否认为使用“UUID”会产生数据库性能问题,因为当用户进行编辑时,将需要使用 UUID 列的 SQL UPDATES。我将不得不研究上述内容,但我认为在这种方法中,您可以根据 API 是否返回,在使用自动增量生成的 ID 和使用“UUID”进行 sql 更新之间切换。也许应该在 AngularJS 端使用“UUID”,在数据库端使用自动增量。
  • 不能谈论数据库性能,因为它受到您的方案以及查询和托管基础设施中的许多其他因素的影响。但我鼓励您进行概念验证并对其进行性能测试
猜你喜欢
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 2013-02-24
相关资源
最近更新 更多