1

我们有一个客户需要建立 N 个本地数据库,每个数据库包含一个站点的数据,然后有一个包含所有 N 个数据库的联合的企业主数据库。单个站点数据库中的更改需要传播到主数据库,主数据库中的更改需要传播到相应的单个站点数据库。

我们一直在为需要两个同时保持最新的数据库的客户端使用 MySQL 复制。那是双向复制。如果我们在这里尝试完全相同的方法,我们最终会得到与主数据库等效的所有 N 个本地数据库,这不是我们想要的。不仅每个单独的站点不能看到来自其他站点的数据,而且从主站点发送该数据 N 次而不是一次可能是一种巨大的浪费。

使用 MySQL 完成这种新的星型模式有哪些选择?我知道我们只能复制某些表,但是有没有办法按记录过滤复制?

是否有任何工具可以帮助或竞争 RDBMS 更好看?

4

8 回答 8

3

SymmetricDS可以解决这个问题。它是支持网络的、独立于数据库的、数据同步/复制软件。它使用 Web 和数据库技术在关系数据库之间近乎实时地复制表。该软件旨在扩展大量数据库,跨低带宽连接工作,并承受网络中断期间。

我们已经使用它将 1000 多个 MySQL 零售商店数据库同步到 Oracle 企业数据库。

于 2010-01-27T02:22:37.583 回答
2

我以前做过,AFAIK 这是最简单的方法。您应该考虑使用 Microsoft SQL Server 合并复制和使用行过滤。您的行过滤将设置为有一个列,说明它应该去哪个单个站点目标。

例如,您的表可能如下所示:

ID_列 | 第 2 列 | 目的地

列中的数据可能如下所示:12345 | '数据' | “站点 1”

然后,您可以将合并复制“订阅者”site1 设置为过滤列“目标”和值“站点 1”。

这篇文章可能会有所帮助:

为合并复制筛选已发布数据 msdn 上还有一篇名为“增强合并复制性能”的文章可能会有所帮助 - 您还需要了解在 SQL Server 合并复制中设置发布者和订阅者的基础知识。

祝你好运!

于 2009-11-19T21:14:16.720 回答
1

简短的回答不,你应该重新设计。

长答案是的,但这太疯狂了,设置和管理起来会很痛苦。

一种方法是在站点之间循环主数据库的复制。使用脚本从一个站点复制 30 秒,记录它走了多远,然后继续下一个站点。你不妨看看replicate-do-db和朋友限制复制的内容。

我不确定是否可行的另一个选择是在主办公室中有 N 个 mysql,从每个站点办公室复制,然后使用联合存储引擎提供从主数据库到每个站点从属的公共视图。站点从站可以从主数据库复制并获取他们需要的任何更改。

于 2009-11-14T12:40:02.413 回答
1

如果您需要单向复制,则使用在星形中心和自定义“桥”应用程序中复制的多个数据库副本将数据进一步移动到最后一个

于 2009-11-22T03:07:23.147 回答
1

只是一个随机指针:Oracle lite 支持这一点。我已经为类似的任务评估过一次,但是它需要在所有客户端上安装一些东西,这不是一个选项。可以在此处找到粗略的架构概述

于 2009-11-23T08:29:47.727 回答
1

可能值得一看 maatkit 中的mysql-table-sync,它可以让您使用可选的--where子句同步表。

于 2009-11-23T11:14:04.647 回答
0

听起来你需要一些专家帮助——我可能不是。

这种复制需要多“实时”?某种 ETL 过程(或多个过程)可能是一种选择。我们在内部使用 MS SSIS 和 Oracle;SSIS 似乎非常适合 ETL 类型的工作(但我不在那个特定的煤面上工作,所以我真的不能说)。

数据的波动性如何?您会说数据主要是可操作的/事务性的吗?你在说什么类型的数据量?

中央主机是否也用作其所在办公室的本地数据库?如果是这样,您可能想改变这一点——让总部像远程办公室一样工作——这样你就可以一视同仁地对待所有办公室;如果对不同的站点进行不同的处理,您经常会遇到问题/异常。

于 2009-11-19T20:56:40.343 回答
0

听起来您最好为此跳出直接数据库结构。

我没有给你详细的答案,但这是我要做的高水平:

我会从每个数据库中选择过去的更改列表(合理的时间范围),构造插入和删除语句来统一“大”数据库上的所有数据,然后分离较小的插入和删除语句集每个特定的数据库。

然后我会运行这些。

如果与传入和传出的数据有任何重叠,则此设置可能会出现“合并”问题。

由于您的时间框架没有正确构建,还存在数据丢失或重复的问题。

于 2009-11-19T21:27:48.847 回答