Android 同步数据库sqlite时的一致自动增量主键
我在服务器上有一个(概念上的)sqlite数据库,它与我将要开发的Android应用程序的sqlite数据库保持一致 我对每个名为_id变量的表使用自动递增整数主键,例如_entry _id或_goal _id 我通过为每个表创建一个“修改”表来处理同步,该表详细说明对哪个表发生了哪些操作以及该表中的哪些条目 用户可以选择与服务器同步,但这不是必需的。这一点至关重要,遗憾的是,在人们使用应用程序时,强迫他们与服务器同步的选项是不可能的 我在概念层面上遇到了以下问题: 假设服务器数据库有一个包含以下字段的表“条目”:Android 同步数据库sqlite时的一致自动增量主键,android,database,sqlite,auto-increment,consistency,Android,Database,Sqlite,Auto Increment,Consistency,我在服务器上有一个(概念上的)sqlite数据库,它与我将要开发的Android应用程序的sqlite数据库保持一致 我对每个名为_id变量的表使用自动递增整数主键,例如_entry _id或_goal _id 我通过为每个表创建一个“修改”表来处理同步,该表详细说明对哪个表发生了哪些操作以及该表中的哪些条目 用户可以选择与服务器同步,但这不是必需的。这一点至关重要,遗憾的是,在人们使用应用程序时,强迫他们与服务器同步的选项是不可能的 我在概念层面上遇到了以下问题: 假设服务器数据库有一个包含以
- “\u entry\u id”是一个自动递增的整数主
- “title”是一个文本字段
- 0,deventry0
- 1,开发项目1
- 0,deventry0
- 1,开发项目1
- 0,dev2entry0
- 1,Dev2 Entry1
- 0,deventry0
- 1,开发项目1
- 2,Dev2入口0
- 3,Dev2 entry1
- 0,dev2entry0
- 1,Dev2 Entry1
- 2,dev1入口0
- 3月1日
Assume the same entries for the server database as above
Assume that a new device, device3, has an entry:
- 0, dev3entry0
when an insert needs to occur when syncinc
get the id that's been assigned to device3's entry: 0
check the id against the largest id that's already been assigned to the server's db: 3
if 0 == 3 + 1 (the next increment to be assigned)
then insert the new entry to the database, the keys are the same
otherwise
duplicate the entry in device3 so that the key == 3 + 1
delete the original entry
使用此算法(当您不考虑同步到device3时),您应该在服务器数据库中保留以下内容:
- 0,dev2entry0
- 1,Dev2 Entry1
- 2,dev1入口0
- 3月1日
- 4,dev3entry0
- 4,dev3entry0
干杯。不确定您是否还需要这个答案,但考虑到帮助社区的想法,下面是: 我的应用程序也遇到了类似的问题。我决定使用一个复合PK,正如@user1843640的问题所描述的那样
虽然这个问题似乎没有正确的答案,但这个问题本身帮助我思考解决这个问题的方法。最多两周后,我将完成我的实现,由于这是我正在开发的一项学术工作,我将在GitHub中公开该源代码。完成后我会回到这里:)我面临着类似的问题。你找到解决办法了吗?还没有。我已经推迟了在我的软件中同步的工作,直到它完全需要实现。我很有兴趣看到你实现这一点,干杯!