【发布时间】:2017-09-01 08:11:52
【问题描述】:
我们有一个应用程序(IONIC 2 手机应用程序前端,ASP .Net Core 2.0 Web Api 后端和 MySql Server)。
手机应用需要能够在离线模式下工作,并且能够在有互联网连接时同步(上下)。我立即意识到 MySql 数据库中的自增 int 主键将是一个问题,并考虑改用 GUID/UUID 主键。但我担心性能。我有两个问题:
在 MySql 中存储 UUID 字段的最佳方式是什么?字符(36)?据我所知,MySql 没有专用的 UUID 数据类型? (我使用的是 MySql Server 5.6.30)
不将其设为主键是否是个好主意,这样它就不是唯一的了?这肯定会加快性能吗?而且 UUID 几乎可以保证是唯一的,所以 MySql Server 没有必要浪费时间检查这个......
谢谢
【问题讨论】:
-
我不理解这个问题,也不知道您为什么要在 UUID 或自动增量主键之间进行选择。当应用程序最终上线并进行同步时,只允许 MySQL 分配一个 id 会有什么问题?
-
感谢蒂姆的快速回复。好吧,手机应用程序将有一个本地数据库,它们将在离线模式下存储所有数据。如果我们使用自动递增的 int 主键,并且手机应用程序的用户创建了一条新记录,它可能会得到 ID = 157(这将用于具有该表的外键的所有其他表)。现在,当手机在线并且应用程序同步时,在实时数据库上它可能会获得不同的 ID(因为其他用户同时同步了他们的新记录)。现在手机数据库和实时数据库上的 ID 不匹配
-
是的,当手机应用程序同步时,Web API 可以告诉手机应用程序实际 ID 是什么,然后手机应用程序可以更新它在所有表格中的 ID。但这可能是 Web API 告诉手机应用程序“正确,该记录的实际 ID 是 160”的问题,但手机应用程序已经使用了该 ID(因为他们在离线工作时添加了 4 条新记录)
-
我想我没有看到拥有两个 ID 的问题。主数据库使用自动增量,每个应用程序都有自己的 ID。从其他应用程序的角度来看,这没有错;那些其他应用程序无论如何都无法在主目录中看到新项目。
-
hmmm.... 好的,所以客户端 ID 和主 ID 之间会有某种映射?
标签: mysql primary-key uuid guid