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 主键。但我担心性能。我有两个问题:
在 MySql 中存储 UUID 字段的最佳方法是什么?字符(36)?据我所知,MySql 没有专用的 UUID 数据类型? (我正在使用 MySql 服务器 5.6.30)
最好不要将它设为主键,这样它就不是唯一的了吗?这肯定会加快性能吗?而且 UUID 几乎可以保证是唯一的,所以 MySql 服务器没有必要浪费时间检查这个...
谢谢
在没有完整细节的情况下,我会建议以下一般工作流程:
- 用户添加了新产品
- 这导致一条记录被写入本地 SQLite 数据库
- 维护一个名为
sync
的列,用于跟踪是否已将本地记录推送到服务器
- 请注意,应用程序显示的产品是缓存的服务器数据和尚未同步的 SQLite 数据的总和
- 当应用程序进行同步时,它首先推送新产品,然后将这些 SQLite 记录标记为已同步
- 当它提取最新的目录时,它将 return 新产品与它们在远程 MySQL 数据库中出现的实际唯一 ID
- 如果应用程序再次离线,则返回第一步并执行相同的操作
这里的基本思想是只专注于尽可能多地保留真相的一个版本。不要让您的应用程序为服务器一无所知的产品分配 ID。一方面,分配这样一个 ID 然后用户决定删除产品而不同步是否有意义?
我们有一个应用程序(IONIC 2 phone 应用程序前端,ASP .Net Core 2.0 Web Api 后端与 MySql 服务器)。
phone 应用程序需要能够在离线模式下工作,并且能够在有互联网连接时同步(上下)。我立即意识到 MySql 数据库中的自动递增 int 主键将是一个问题,并考虑改用 GUID/UUID 主键。但我担心性能。我有两个问题:
在 MySql 中存储 UUID 字段的最佳方法是什么?字符(36)?据我所知,MySql 没有专用的 UUID 数据类型? (我正在使用 MySql 服务器 5.6.30)
最好不要将它设为主键,这样它就不是唯一的了吗?这肯定会加快性能吗?而且 UUID 几乎可以保证是唯一的,所以 MySql 服务器没有必要浪费时间检查这个...
谢谢
在没有完整细节的情况下,我会建议以下一般工作流程:
- 用户添加了新产品
- 这导致一条记录被写入本地 SQLite 数据库
- 维护一个名为
sync
的列,用于跟踪是否已将本地记录推送到服务器 - 请注意,应用程序显示的产品是缓存的服务器数据和尚未同步的 SQLite 数据的总和
- 当应用程序进行同步时,它首先推送新产品,然后将这些 SQLite 记录标记为已同步
- 当它提取最新的目录时,它将 return 新产品与它们在远程 MySQL 数据库中出现的实际唯一 ID
- 如果应用程序再次离线,则返回第一步并执行相同的操作
这里的基本思想是只专注于尽可能多地保留真相的一个版本。不要让您的应用程序为服务器一无所知的产品分配 ID。一方面,分配这样一个 ID 然后用户决定删除产品而不同步是否有意义?