4

我正在 Node.js 和 MySQL 中创建这个 Web 应用程序,并且我在数据同步方面遇到了困难。

这是场景:

假设我们有 1000 个客户,他们的办公室/站点都有本地网络服务器数据库。用户可以登录、编辑数据、数据记录传感器等。所有这些活动都会为每个客户/站点每天贡献大约 500KB 的表数据。因此,1000 名客户中的每一个都有一个本地数据库,该数据库将始终在一天内多次更新新数据。

同时,为所有 1000 名客户提供云服务,让他们可以登录并查看他们的所有数据,就好像他们就在现场一样。他们还可以从云端进行更改、编辑/创建/删除数据。

现在我遇到的问题是:

  • 每个站点都需要与云服务器双向同步。你有什么建议吗?(多主复制?,集群?,写一个自定义?)有什么优点?

  • 当客户的站点离线并且本地数据库和云数据库中都添加了新数据时怎么办?通常如何进行冲突和合并?

提前致谢!

4

3 回答 3

1

想象一个平行的现实,ATM 没有与银行的链接,它们使用数据库的副本并且仅在一天结束时同步。

您将能够开车到该市的每台自动取款机,并多次重复提取您拥有的所有资金。只有当您已经是百万富翁并离开该国时,他们才会注意到欺诈行为。

这只是一个例子,但是你看,即使你弄清楚了这个同步机制,你仍然可能会遇到意想不到的问题,不仅是值被改变,而且不同的记录被相同的主键创建等等。这可能是一个主要问题.

我相信根本没有解决这个问题的通用技术。您必须仔细研究应用程序可以在数据库中执行的每个操作的同步方面。可能会在用于同步的过程中生成一个可运行的 SQL 脚本,我不知道。

于 2013-11-03T03:54:30.877 回答
1

意见,来自个人经验: MySQL 复制不能很好地扩展。如果您的同步失败,您将需要一些机制来通知和恢复。如果您要管理其中的一千个,您将做大量的运营工作。

另一种意见:考虑跟踪变化。当任一端进行更改时,将该更改提交到更改控制系统。在预定义的时间,让两端锁定更改,让两端运行一个进程以从更改日志中剔除重复项,然后让两端使用非重复项更新其数据库。最后,解锁更改。同时,两端都被写入以咨询更改系统以列出待处理的更改。

这不是一个容易的情况:你要处理大规模的分布。尽可能减少活动部件,以减少维修点。

于 2013-11-03T04:18:50.960 回答
0

Mysql 复制不是为此目的可以依赖的东西。

但是,如果您可以选择基于全文档的存储,Couch DB 解决方案将能够解决这个问题。我们使用沙发数据库已经有一段时间了,它几乎解决了这个问题,我们将本地沙发数据库同步到服务器沙发集群。我知道这是一篇旧帖子 - 但我希望有人会觉得这很有用。祝你好运!

于 2020-12-18T01:38:06.700 回答