我的应用程序需要与其他应用程序用户(在他们自己的设备上)同步。我还希望支持离线编辑,这些编辑会在用户连接到互联网时与其他协作用户同步。
因此,用户A会更改(在离线状态下)数据库中的某些数据(换句话说,更新数据库条目)或向数据库添加新记录。当用户A连接到互联网时,所有更改和新记录都会传递给其他协作用户。然后用户B将获取更改/更新并将其插入/更新到用户B的本地设备数据库中。
但是我需要确保整个系统中的数据库条目ID是唯一的。因此,我需要使用类似UUID的东西。
我的问题:在Android SQLite数据库表中,使用UUID(字符串/ Varchar)作为主键而不是自动递增的整数是否不好?
我猜使用字符串(UUID有36个字符)作为主键会有性能问题。
我猜索引uuid比索引整数需要更长时间(比较字符串与整数)。我也猜想,当我使用UUID时,每次插入新的数据库记录/条目时,数据库都需要重新索引主键列,因为主键索引不再按排序顺序排列(如果我使用自动递增的整数主键,那么每个未来记录都添加到末尾,因为新的自动递增主键始终是迄今为止最大的数字,因此索引将自动按排序顺序排列)。我还需要在2-3个表之间进行链接。我还猜想,在联接中比较字符串而不是整数会减慢数据库查询。
但是,我找不到其他实现这样的协作同步系统的可能性,所以我必须使用UUID,对吗?
另一种可能性是使用自动递增的整数主键,然后使用第二列uuid。因此,在用户本地设备上工作时,我将使用此主键(整数)进行JOIN等操作,而在与其他用户同步时,我将使用uuid列。
你们认为这种方法怎么样,或者你认为这太麻烦了,因为使用UUID作为主键不会带来明显的性能问题?还有其他建议吗?