纵马饮白虹 2019-10-31 10:04 采纳率: 0%
浏览 281
已采纳

内存和文件的实时同步有什么好的思路?

目前有这样一个需求, 前段时间自己做了一个队列 用于存放一些业务数据
将两个功能模块解耦。然后为了保证内存的持久化 想通过文件保存队列中的数据。

目前有一个困难地方是 队列中的数据会不断的变化 怎么保证文件和内存中数据的一致?
可能会有临时停止服务的场景 重启后需要能从文件中恢复数据 因此要求文件中的内容和内容中的数据一致

我为难的是怎么删除文件中指定位置的数据

目前有两个思路:

一:不直接记录数据 而是记录添加和删除操作的日志 通过重放来做数据的恢复。

二:不直接删除 而是将要删除数据的位置记录下来当作标记,每隔一段时间重新将内存中的数据写道文件里并清除记录的位置。如果重启后恢复数据 根据数据文件和记录的删除位置 恢复数据

感觉还是不满意,想请教下新的思路

  • 写回答

1条回答 默认 最新

  • bobhuang 2019-10-31 10:24
    关注

    参考增量备份的设计思路:
    1. 每次操作有一个全局唯一的、递增的操作id,命名为opid;
    2. 文件分两种:快照文件,保存一个时刻的业务数据镜像;操作日志文件,保存一段时间的添加删除日志,以opid为索引顺序排列;
    3. 每隔一段时间更新快照文件,有唯一的opid表示快照对应的时刻;
    4. 每次操作业务数据,生成一个opid,添加一笔操作日志到“操作日志文件”。

    因为操作日志是顺序累加,可以用块存储的方式,保证比较高速的存储。
    定期生成快照文件,保证在恢复数据时,有确定的、可控的恢复时间。
    递增的opid,保证在使用快照文件和操作日志文件时,数据的一致性。

    当出现异常重启之后,恢复的数据,只在操作日志未作记录的部分操作,存在数据丢失,其他数据都是一致并且完好的。
    快照文件和操作日志文件,可以按时间顺序定期切换到一个新的文件。保留一定数量的历史文件,定期清理过期文件。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 8月31日

悬赏问题

  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥200 关于#c++#的问题,请各位专家解答!网站的邀请码
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号