产品此前的数据备份方案,存在不少问题,所以需要设计一个新的方案。本文总结一下新旧方案的优劣
首先APP是一个支持离线的应用。本地数据保存在sqlite,在离线环境下,在本地数据库里读写记录,在有网络的时候,再将数据备份到服务器;同时,也可以随时将数据从服务器恢复到本地
旧方案
此前的备份方案是基于内容的,每一条记录都有create_date和modify_date字段,同时APP保存有latest_backup_date(上次备份时间)。然后开始备份的时候,就对所有表进行扫描,根据这3个时间的对比,直接生成sql语句,发到服务器执行,写入服务端的mysql数据库;收到服务器的成功响应之后,又刷新latest_backup_date
而恢复逻辑,则是从服务器的mysql数据库里,遍历找到所有的记录,也生成sql语句,发回客户端,客户端再执行sql进行恢复。当发生冲突的时候,以客户端的数据为准,违反主键约束的时候,插入数据就会失败。比如客户端将一个卖品的价格改为200,而服务器mysql里的记录还是100,那么下发的insert语句就无法执行
这个方案有几个问题:
1、客户端的备份逻辑,散落在业务模块里,因为涉及到业务操作的地方,都需要记得修改modify_date和create_date,容易造成数据备份不上去的BUG
2、备份逻辑依赖客户端本地时间,而客户端时间总是不可靠的
3、服务端缺少客户端数据库的完整镜像,也就是说,一旦有BUG导致部分数据没有备份上来,那么如果用户卸载了APP或者PAD丢失,这部分数据就永远找不回来了
4、生成恢复文件之前,需要遍历mysql表,数据量大的时候,容易使客户端超时而恢复失败
5、恢复逻辑以客户端数据为准,在某些场景下不满足需求,比如做不到在服务端对客户端的数据进行干预校正
6、sql是纯文本,当数据量大的时候,在网络间传输的数据太多
新方案
新的方案准备这样做:备份和恢复不再基于内容,而是基于文件。每次备份都把本地的数据库文件上传到服务器。但是在传输上有特别处理,只传文件的差量;在服务器利用差量文件,合并得到完整的客户端数据库文件副本。同时在数据库增加一个差量表,配合trigger,将每次的insert,update,delete操作,写到差量表中。在服务器遍历差量表,将有变化的数据写到mysql里
恢复的时候,就直接把数据库文件发到客户端,替换掉客户端的数据库文件
在这个过程中,当然需要在服务端增加专门的表,来控制整个流程,比如记录文件在OSS里的路径,最后备份的时间等,本文不展开
这个方案相比老方案的优势:
1、客户端业务代码不再需要关注数据同步的逻辑,减少了出错的机会
2、不依赖客户端时间
3、服务端始终有客户端数据库的完整镜像,即使有BUG,也只是没有写到mysql里,对汇总统计有影响,但是不会造成客户端数据直接丢失
4、恢复文件不需要每次生成,速度快
5、可以在服务端直接修改数据库文件,校正客户端的错误;版本升级时如果需要做数据迁移,也可以在服务端统一处理
6、由于每次备份的差异量小,生成的差量文件也很小,需要在网络间传输的文件一般也比较小
新方案的局限性
总的来说,新方案的优势比较明显。但是,这个方案也只能解决单个客户端操作的场景,对于多终端同时操作就无能为力了。比如说,2个PAD同时修改一个会员的余额,那先备份的那条数据将会被覆盖,造成数据错误。所以,还需要保证同时只有一个终端操作数据,这样才能放心地替换文件。因为这种场景下,是不存在数据冲突的
如果要支持离线环境下,多终端同时操作的场景,则还需要在这个方案的基础上更进一步,识别出终端差异,将各终端的数据merge到中心文件,此外还需要保证文件合并的先后顺序等。这种场景比单客户端的场景要复杂很多,不在本文讨论范围,有空单独再写
分享到:
相关推荐
本项目“毕业设计,基于异构数据的数据同步与迁移系统,数据离线同步改进版”提供了一个实际的解决方案,适用于毕业设计、课程设计以及学习参考。本文将深入探讨该系统的重点技术和实现细节。 1. 异构数据处理:...
通过使用Python3开发,这类工具通常具有高度的可定制性和灵活性,能够满足各种复杂的数据同步需求。正确理解和使用这样的工具,对于保障数据库一致性、避免数据丢失和减少停机时间具有重要意义。
该项目是阿里巴巴集团广泛应用的DataX开源数据集成平台的Java设计源码,包含1217个文件,其中Java...该平台支持多种异构数据源间的离线数据同步,包括MySQL、Oracle、HDFS、Hive等,适用于构建高效的数据集成解决方案。
离线地图的实现是针对那些在无网络或者网络不稳定环境下仍需使用地图服务的应用场景而设计的解决方案。这种技术的核心是将在线地图服务中的大量地理信息数据预先分割、存储,并在本地进行访问,以实现地图的浏览和...
每个图块都有唯一的src因此您可以基于与src相同的数据使用唯一的ID来存储图块数据。 所有地图脚本,样式和其他文件(标记图像)都可以放置到应用程序缓存清单文件中。 有用的链接 笔记 这只是概念验证的样本,...
1. **同步策略**:如何确定何时以及如何进行同步,例如基于文件修改时间戳或用户手动触发。 2. **数据一致性**:如何保证在多设备间的数据一致性,尤其是在网络条件不佳或设备断开连接的情况下。 3. **性能优化**:...
总之,OfflineSheets是一个利用CouchDB和lightcouch构建的离线数据表数据库解决方案,它旨在帮助开发者创建能够在离线环境中有效工作的应用程序。通过理解和使用这个项目,可以学习到如何利用NoSQL数据库处理离线...
此外,用户还可以自定义迁移策略,如基于文件访问时间、大小等因素。HSM软件还具备介质管理功能,能够管理磁带库和光盘库,实现数据的多层复制,并支持灵活的数据迁移计划。 该方案主要包括数据迁移服务器、存储...
文章结合了作者在上海德拓信息技术股份有限公司南京分公司参与离线数据采集存储系统的开发与维护的经验,设计并实现了该实时数据处理系统。该系统的设计与实现不仅提供了对实时数据处理问题的解决方案,也对相关领域...
Sync Framework是由微软开发的一种全面的数据同步解决方案,它为开发者提供了强大的工具来处理不同数据源之间的同步问题。在本文中,我们将深入探讨Sync Framework的核心概念、工作原理以及如何在PDA和PC之间实现...
文件传输是指在网络环境下...本文提出的基于Winsock和IOCP的文件传输方案,在保证了文件传输效率的同时,通过异步I/O模型和流控制技术确保了传输的可靠性,为数字化时代下文件传输技术的发展提供了新的思路和解决方案。
- **RPA技术**:通过模拟人类在应用软件中的交互,实现业务流程自动化,适用于数据录入、表单填写、系统间数据同步等任务。 - **离线安装**:用户无需保持网络连接即可安装和使用,适合网络环境不稳定或对安全有严格...
微软同步框架(Microsoft Sync Framework)是微软推出的一个全面的数据同步平台,它允许开发者构建高度可扩展和灵活的数据同步解决方案。这个框架的核心在于提供了一套强大的API,使得开发者能够轻松地处理各种数据...
总的来说,字节跳动的数据质量解决方案通过定制化的工具和服务,解决了大规模数据环境下的实时和离线数据质量管理问题,为业务系统的稳定运行和数据的准确分析提供了保障。这种解决方案和最佳实践对于其他大型企业...
湖仓一体大数据平台解决方案还提供了丰富的数据管理功能,包括数据安全、数据脱敏、数据加密、数据规划、资产盘点、资产盘点报告、元数据管理、生命周期治理项管理、治理效果分析、全链血缘、元数据检索、元数据分析...
离线安装版的Chrome通常是一个自包含的可执行文件,例如"ChromeStandaloneSetup.exe",这个文件包含了完整的浏览器安装包。用户只需双击这个文件,按照提示步骤进行,就可以在没有网络的情况下完成Chrome的安装。这...
数据中台的数据管理主要包括数据资产化、数据标准化、数据模型管理、数据同步、数据开发、数据研发、数据集成、实时计算、离线计算、机器学习等多个方面。同时,数据中台还包括数据爬虫、数据埋点、数据日志、文件...
8. **用户数据同步**:虽然离线浏览器主要服务于无网络环境,但可能有用户需求在不同设备间同步数据。这就需要实现云同步或本地备份恢复功能,涉及数据同步协议(如WebDAV或FTP)和数据一致性管理。 9. **兼容性**...