我的应用需要与其他应用用户同步(在自己的设备上) . 我还想支持离线编辑,当用户连接到互联网时,这些编辑会与其他协作用户同步 .
因此,用户A改变(当他离线时)一些数据(换句话说,他将更新数据库条目)或向数据库添加新记录 . 当用户A连接到互联网时,所有更改和新记录都将传递给其他协作用户 . 因此,用户B将获得更改/更新,并可以将其插入/更新到用户B本地设备数据库中 .
但我需要确保数据库条目的ID在整个系统中是唯一的 . 因此我需要使用像UUID这样的东西 .
我的问题:在android sqlite数据库表中使用UUID(String / Varchar)作为主键而不是自动递增的整数是不是一个坏主意?
我想通过使用字符串(UUID有36个字符)作为主键会出现性能问题 .
我想索引uuids而不是整数需要更长的时间(比较字符串与比较整数) . 我还猜测,当我使用UUID时,每次插入新的数据库记录/条目时,数据库都需要重新索引主键列,因为它们的主键索引不再处于排序顺序(这将是我何时使用整数自动递增主键,因为每个未来的记录都会在末尾添加,因为新的自动递增的主键始终是目前为止最大的数字,因此索引将自动按排序顺序排列) . 我还需要做的是加入2到3张 table . 我还猜测,比较JOINS上的字符串而不是整数会减慢数据库查询的速度 .
但是我无法看到实现这种协作同步系统的任何其他可能性,所以我必须使用UUID,对吧?
另一种可能性是使用整数自动增量主键并使用第二列uuid . 因此,为了处理用户本地设备,我将使用此主键(整数)进行JOINS等,而我将使用uuid列与其他用户进行同步 .
你们对这种方法有什么看法,或者你认为有多少工作,因为你不会期望UUID直接作为主键出现重大的性能问题?
还有其他建议吗?