android sqlite 双主键,Android:在SQLite中使用UUID作为主键

在设计一个需要用户协作和离线编辑的应用中,开发者考虑使用UUID作为SQLite数据库的主键,以确保全局唯一性。然而,对性能有所顾虑,担心字符串UUID作为主键可能带来的索引和JOIN操作的性能下降。文章讨论了使用UUID代替自动递增整数主键的潜在问题,包括索引效率和JOIN操作的性能影响,并探讨了使用两个列——一个整数主键用于本地操作,一个UUID用于同步的方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我的应用需要与其他应用用户同步(在自己的设备上) . 我还想支持离线编辑,当用户连接到互联网时,这些编辑会与其他协作用户同步 .

因此,用户A改变(当他离线时)一些数据(换句话说,他将更新数据库条目)或向数据库添加新记录 . 当用户A连接到互联网时,所有更改和新记录都将传递给其他协作用户 . 因此,用户B将获得更改/更新,并可以将其插入/更新到用户B本地设备数据库中 .

但我需要确保数据库条目的ID在整个系统中是唯一的 . 因此我需要使用像UUID这样的东西 .

我的问题:在android sqlite数据库表中使用UUID(String / Varchar)作为主键而不是自动递增的整数是不是一个坏主意?

我想通过使用字符串(UUID有36个字符)作为主键会出现性能问题 .

我想索引uuids而不是整数需要更长的时间(比较字符串与比较整数) . 我还猜测,当我使用UUID时,每次插入新的数据库记录/条目时,数据库都需要重新索引主键列,因为它们的主键索引不再处于排序顺序(这将是我何时使用整数自动递增主键,因为每个未来的记录都会在末尾添加,因为新的自动递增的主键始终是目前为止最大的数字,因此索引将自动按排序顺序排列) . 我还需要做的是加入2到3张 table . 我还猜测,比较JOINS上的字符串而不是整数会减慢数据库查询的速度 .

但是我无法看到实现这种协作同步系统的任何其他可能性,所以我必须使用UUID,对吧?

另一种可能性是使用整数自动增量主键并使用第二列uuid . 因此,为了处理用户本地设备,我将使用此主键(整数)进行JOINS等,而我将使用uuid列与其他用户进行同步 .

你们对这种方法有什么看法,或者你认为有多少工作,因为你不会期望UUID直接作为主键出现重大的性能问题?

还有其他建议吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值