首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >脱机/在线应用程序中ids的生成

脱机/在线应用程序中ids的生成
EN

Software Engineering用户
提问于 2015-06-18 08:46:52
回答 1查看 2.9K关注 0票数 5

对于如何识别应用程序中的元素,我有点困惑。

我有一个带有sql数据库的rest后端。我目前使用数字(自动增量)I作为主键,并将它们用于外键。我还定义了基于语义的统一。

我的客户端是一个应用程序,我大部分时间都在镜像远程数据库。这样做的目的是有一个缓存(性能),并使应用程序离线使用成为可能。离线使用可以是临时的,也可以是永久的(用户可以使用该应用程序,而无需连接到服务器)。

到目前为止,我一直在用在线使用的方式来实现客户端。因此,当用户创建一个新项目时,我将向服务器发送一个POST,服务器创建该项目并给它一个id,并将该项目与id一起发送回我,并将其存储在本地数据库中。这样,我将在客户端数据库中使用这个id作为外键。

但是离线使用不是这样的。当我添加一个没有服务器的项目时,我必须在客户机中给它一个id。因此,这是立即可用的更新,使用外键等。此外,当脱机只是暂时的,即用户稍后连接到服务器,我必须同步的项目被添加离线。如果我使用客户端it,我将不得不用服务器生成的it在服务器中重新安装这些it,否则数据库看起来会不一致,而且它可能会发生冲突(尽管非常容易改进)。还是只使用客户端的ids?

所以我的问题是,这是如何处理正常的?我能想到四种方法:

  1. 完全删除ids,只使用uniques。我甚至可以用这个得到更新。例如,一个唯一的可以是一个名称。但是如果用户在线并创建了一个项目,这可能会导致如下问题。离线,并更新项目的名称,这是唯一的,2次。为了在服务器中进行更新,我必须在客户端存储唯一值的最后一个值,当同步发生时。以及级联更新。此外,在数据库中,这个唯一的空间也比数字id占用更多的空间。
  2. 仅在客户端中删除ids。因此,在客户机中,我只使用uniques (name等),并向服务器发送更新的新值,这与1中相同。服务器内部使用ids,但从不将其发送给客户端。
  3. 使用服务器ids,并在客户端联机时立即执行同步调用,将客户端生成的ids替换为服务器生成的ids。
  4. 总是在客户机中生成ids -可能类似于描述的这里。(为了保证用户之间的唯一性,例如设备UUID +时间戳,但这会导致ids相对较长,这里不确定空间/性能的影响)。并在服务器中使用它们,而不是使用autoincr id。或者两者都用?
EN

回答 1

Software Engineering用户

回答已采纳

发布于 2015-06-18 09:30:45

没有任何方法可以让你有一个以上的方法来唯一地识别你的实体。你能做的最好就是咬紧牙关,把问题限制在尽可能小的范围内。

例如:

  • 只分配服务器上的实际ID。服务器甚至不应该知道客户端使用另一个ID方案,只知道它提供了新的记录,这些记录必须接收一个新的真实ID。
  • 在客户机中使用与实际ID没有重叠的不同ID方案(例如,负值而不是正值.)
  • 更改客户端中处理实体查找的所有位置,以便他们理解这两种方案,如果尚未分配另一种方案,则使用另一种方案。
  • 更改应用程序中向服务器发布新数据的位置,以便在确认保存后更新“真实ID”。

没什么比这更简单的了。(当然,根据不要重复自己的原则,将需要更改的位置最小化以使该解决方案变得更容易是一个好主意。)

票数 6
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/287163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档