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

123 天前
 nnegier

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

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

1451 次点击
所在节点    程序员
14 条回复
v2hh
123 天前
md5 比对?
linauror
123 天前
后一条依次存前一条的特征,这样直接对比最后一条数据就可以了
johnnyyeen
123 天前
按一定规则做数字摘要
siweipancc
123 天前
楼上说的,id 跟数据 md5 的表,数据变动主动维护,传递这个表就行,记得加 audit 时间列
815979670
123 天前
通过 crc32 / md5 生成校验码
kuituosi
123 天前
分段比较 hash 或者 id
如果只比较行数 id 就够了,如果担心内容不一样就比较 hash
tool2d
123 天前
既然说了"云端数据是本地数据的备份",那就是走主从备份流程。完全不担心内容数据是否一致,这个是备份协议考虑的。

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

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

下次客户端再更新,后两条在修改时间以外,都要重新上传的。
Beats
122 天前
md5 crc 啥的
nnegier
122 天前
@Beats
@siweipancc
@linauror
我还有一个疑问,如果 Hash 比较发现不一样,怎么快速找出那个不一样的表项位置呢?
Beats
121 天前
@nnegier 全局 hash 、局部 hash ,粒度你自己把握,确定到某一块之后再全量 diff 这一块的内容

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1007381

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX