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

2024-01-10 09:57:54 +08:00
 nnegier

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

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

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

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

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

下次客户端再更新,后两条在修改时间以外,都要重新上传的。
Beats
2024-01-10 23:09:12 +08:00
md5 crc 啥的
nnegier
2024-01-11 03:25:59 +08:00
@Beats
@siweipancc
@linauror
我还有一个疑问,如果 Hash 比较发现不一样,怎么快速找出那个不一样的表项位置呢?
Beats
2024-01-11 22:17:24 +08:00
@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