纵马饮白虹 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 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛