我有一个 Android 应用程序,它具有三种独立运行的不同同步机制,每种机制都使用自己的 CoroutineScope。所有这些同步都依赖于数据库中存储的相同类型的数据(例如库存数据)。我目前使用 DataStore 进行数据存储,但由于大型数据集的性能问题,计划迁移到 Room。
问题来了:
每种同步机制对数据的处理方式不同(例如,从 API 下载、本地过滤、映射等)。 第二个同步机制从 API 获取最新数据,应该具有最高优先级。这意味着它应该始终确保其数据更新不会被处理过时数据的其他同步机制覆盖。 这是一个示例场景:
00:01:第二次同步开始从API下载最新数据并开始保存到本地数据库。
00:02:第一次同步开始处理从本地数据库取出的数据,仍然是旧数据。
00:03:第二次同步完成,将最新数据保存到数据库中。
00:04:第一次同步完成处理并用过时的数据覆盖数据库。 最后,我最终在数据库中得到过时的数据,因为第一次同步会覆盖第二次同步保存的较新数据。
简化一下:
simple:
-> fetch entire inventory (1st synchro)
-> fetch stocks (2nd synchro) with creating instance with local DB(OLD data) to process
-> inventory is saved to local DB( 1st synchro)
-> inventory is saved to local DB (2nd synchro) will old data.
Last save is with old data, effect is the same as I don't download any new entire inventory with 1st synchro
我的问题:
如何确定第二个同步机制的优先级,以便其他同步不会处理过时的数据或覆盖其更新?
有没有有效的方法来处理这种情况?
Android 中是否有推荐的模式或最佳实践(例如,使用互斥体、共享标志或队列)来处理访问共享数据的独立机制的同步?
任何指导或示例将不胜感激。
也许考虑使用临时/工作表或一组表来存储旧数据。在下次运行不再需要它们后,可以将其清空,然后将其填充为运行的初始步骤。