我将使用多个移动客户端和一个基于 Web 的服务器应用程序来实现一个分布式应用程序。所以每个客户端和服务器都可以生成表条目。因此,我需要所有参与者的唯一主键,并且我希望能够离线生成密钥。
生成您在分布式环境中使用的主键的最佳方法是什么?对于类似的问题,请参阅使用 SQLite 和 Azure SQL 数据库作为中央存储的在线/离线多客户端移动应用程序的最佳主键策略是什么?
我知道UUID 密钥生成是该场景的好方法,但我想坚持使用名称为 _id 的密钥并按照 Android 平台的建议键入 long。
我不想使用设备(服务器也是设备)ID 和本地 ID的复合ID。这种方法无论如何都不能很好地工作,因为服务器应该能够为某个客户端生成条目。在这种情况下,我还必须在服务器上使用设备 ID。
因此,我目前最喜欢的是使用 long 数据类型构建我的密钥(我之前在另一个项目中这样做过)。我想我将使用高/低方法(例如,请参见此处的 Hi/Lo 算法是什么?)并有一个密钥,其中包括:
- 从服务器生成的客户端 ID(例如 ~28 位)
- 客户端递增的低值(例如〜4位),从不持久
- 客户端上递增的高值(例如 ~ 32 位),仅在客户端上持续存在
客户端 ID 必须在移动应用程序首次启动时从服务器获取。所以第一次启动需要网络连接。这可能是这种方法的缺点。当设备上有客户端 ID 时,我可以在没有网络连接的情况下生成密钥。
通常,高 id 是数据库中的唯一值。当用户卸载应用程序并再次安装时,我必须将他视为新客户,并且必须给他一个新的客户 ID。否则,我将不得不在服务器上保存当前的高 ID,以便能够在丢失或重新安装时恢复它 - 不值得付出努力。
在 Android 上获得高 id 的最佳方法是什么?自动增量键不是解决方案。我需要类似生成器功能的东西。它必须在自己的事务(而不是“用户”事务)中执行。有没有人在 Android 上使用过这种方法,有人能指出我正确的方向吗?(我只找到了这个答案)。
您对多客户端应用程序(在线和离线)使用什么关键策略?