mysql - MySQL 中的 UUID/UUID 主键

标签 mysql primary-key uuid guid

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

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

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

  2. 不将其设为主键会不会是个好主意,这样它就不是唯一的?这肯定会加快性能吗?而且 UUID 几乎可以保证是唯一的,因此 MySql Server 无需浪费时间检查它...

谢谢

最佳答案

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

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


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

关于mysql - MySQL 中的 UUID/UUID 主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45995854/

相关文章:

php - 我应该在 php 中验证/清理 $_SESSION 变量吗?

sql-server - 为什么在SQL中使用 "not null primary key"?

java - 如何使用hibernate JPA 2以二进制形式存储uuid

random -/proc/sys/kernel/random/uuid 是强 key Material 吗?

php - 事件调度程序计算结果的 if 条件

mysql - 使用带有左外连接的 mySQL 查询的 sum() 函数

mysql - 如何制作一个 SQL 来创建一个报告,该报告选择所有带有 certian 行项目的报价,并包括另一个项目(如果它在该报价上)?

sql - SQL Server中如何确定表的主键?

mysql - SQL 唯一键语法

iphone - 如何确保 iOS 设备安全