UUDI/GUID MySQL 中的主键

UUDI/GUID primary key in MySQL

我们有一个应用程序(IONIC 2 phone 应用程序前端,ASP .Net Core 2.0 Web Api 后端与 MySql 服务器)。

phone 应用程序需要能够在离线模式下工作,并且能够在有互联网连接时同步(上下)。我立即意识到 MySql 数据库中的自动递增 int 主键将是一个问题,并考虑改用 GUID/UUID 主键。但我担心性能。我有两个问题:

  1. 在 MySql 中存储 UUID 字段的最佳方法是什么?字符(36)?据我所知,MySql 没有专用的 UUID 数据类型? (我正在使用 MySql 服务器 5.6.30)

  2. 最好不要将它设为主键,这样它就不是唯一的了吗?这肯定会加快性能吗?而且 UUID 几乎可以保证是唯一的,所以 MySql 服务器没有必要浪费时间检查这个...

谢谢

在没有完整细节的情况下,我会建议以下一般工作流程:

  • 用户添加了新产品
  • 这导致一条记录被写入本地 SQLite 数据库
  • 维护一个名为 sync 的列,用于跟踪是否已将本地记录推送到服务器
  • 请注意,应用程序显示的产品是缓存的服务器数据和尚未同步的 SQLite 数据的总和
  • 当应用程序进行同步时,它首先推送新产品,然后将这些 SQLite 记录标记为已同步
  • 当它提取最新的目录时,它将 return 新产品与它们在远程 MySQL 数据库中出现的实际唯一 ID
  • 如果应用程序再次离线,则返回第一步并执行相同的操作


这里的基本思想是只专注于尽可能多地保留真相的一个版本。不要让您的应用程序为服务器一无所知的产品分配 ID。一方面,分配这样一个 ID 然后用户决定删除产品而不同步是否有意义?