V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nnegier
V2EX  ›  程序员

有哪些方法可以检验服务端数据库数据和客户端数据的一致性?

  •  
  •   nnegier · 322 天前 · 1593 次点击
    这是一个创建于 322 天前的主题,其中的信息可能已经有所发展或是发生改变。

    服务端数据库:MySQL 。
    手机端数据库:SQLite 。
    软件本地有一份数据,云端数据是本地数据的备份,没什么区别。

    我初步的想法,就是挨个比较它们的字段 id ,但是有点担心性能问题。

    14 条回复    2024-01-11 22:17:24 +08:00
    v2hh
        1
    v2hh  
       322 天前
    md5 比对?
    linauror
        2
    linauror  
       322 天前
    后一条依次存前一条的特征,这样直接对比最后一条数据就可以了
    johnnyyeen
        3
    johnnyyeen  
       322 天前
    按一定规则做数字摘要
    siweipancc
        4
    siweipancc  
       322 天前 via iPhone
    楼上说的,id 跟数据 md5 的表,数据变动主动维护,传递这个表就行,记得加 audit 时间列
    815979670
        5
    815979670  
       322 天前
    通过 crc32 / md5 生成校验码
    kuituosi
        6
    kuituosi  
       322 天前
    分段比较 hash 或者 id
    如果只比较行数 id 就够了,如果担心内容不一样就比较 hash
    tool2d
        7
    tool2d  
       322 天前
    既然说了"云端数据是本地数据的备份",那就是走主从备份流程。完全不担心内容数据是否一致,这个是备份协议考虑的。

    你只需要把修改过的 row 同步过去就可以了。

    一般 row 都会有最后修改日期,如果你每天同步一次,那么所有提交 row 对象就是 24 小时内变动过的。
    nnegier
        8
    nnegier  
    OP
       322 天前
    @kuituosi #6 比较内容,是把表格里面的所有数据读出来然后哈希吗?
    kuituosi
        9
    kuituosi  
       322 天前
    @nnegier 看你的需求和实现了,全部 hash 最保险就是要多花时间
    nnegier
        10
    nnegier  
    OP
       322 天前
    @tool2d #7 仅靠时间我可能不行,因为我用的是 WebSocket 全双工通信,而且 1 对多 Client 还可能有多个
    tool2d
        11
    tool2d  
       322 天前
    @nnegier 比如有三条记录需要更新,你客户端用 websocket 发了三条数据,最后服务器只收到一条半数据,那么服务器的最后修改时间,就只写到第一条的时间。

    下次客户端再更新,后两条在修改时间以外,都要重新上传的。
    Beats
        12
    Beats  
       321 天前
    md5 crc 啥的
    nnegier
        13
    nnegier  
    OP
       321 天前
    @Beats
    @siweipancc
    @linauror
    我还有一个疑问,如果 Hash 比较发现不一样,怎么快速找出那个不一样的表项位置呢?
    Beats
        14
    Beats  
       320 天前
    @nnegier 全局 hash 、局部 hash ,粒度你自己把握,确定到某一块之后再全量 diff 这一块的内容
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5457 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 08:10 · PVG 16:10 · LAX 00:10 · JFK 03:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.