0

我目前在 POS 项目上。用户要求此应用程序可以在线和离线工作,这意味着他们需要本地数据库。我决定在每个商店和总部之间使用 SQL Server 复制。每个店铺都需要安装SQL Server Express,总公司已经有SQL Server Enterprise Edition。复制将按计划每 30 分钟运行一次,我选择合并复制,因为数据可以在商店和总部发生变化。

当我在做 POC 时,我发现这个解决方案不能正常工作,有时工作是错误的,我需要重新初始化它。这种解决方案也需要很长时间,这显然是用户无法接受的。

我想知道,有没有比我现在正在做的更好的解决方案?

更新1:

系统的约束是

  1. 几乎所有的交易都可以发生在商店和总部。
  2. 有些交易需要在实时模式下进行,也就是说,在用户将数据保存到本地商店后,数据也应该在总部更新。(如果他们目前在线)
  3. 即使他们的商店与总部数据库断开连接,用户也可以工作。
  4. 我们对数据量的估计是每天最多 2,000 行。
  5. Windows 2003 是总公司服务器的操作系统,Windows XP 是所有客户端的操作系统。

更新 2:

  1. 目前他们大约有 15 个客户,但这个数字将以相当缓慢的速度增长。
  2. 每次复制的数据大小约为 100 到 200 行,我认为可能不超过 5 MB。
  3. 客户端通过专线连接到服务器;128 kbps。

我的情况是复制需要很长时间(大约 55 分钟,而我们只有 5 分钟左右),如果我不重新初始化,我几乎需要重新初始化作业才能再次开始复制工作,它根本无法复制。在我的 POC 中,我发现重新初始化后复制总是需要很长时间,时间量不取决于数据量。顺便说一句,重新初始化是我发现它对我的问题有用的唯一解决方案。

如上所述,我的结论是,复制可能不适合我的问题,我认为它可能有另一个更好的解决方案,可以满足我在更新 1 中的需要:

4

3 回答 3

2

听起来您可能需要推出自己的双向复制引擎。

事情需要这么长时间的部分原因是,在如此狭窄的链接 (128kbps) 上,两个数据库必须保持一致(因此它们需要检查所有行)才能开始复制。正如您可以想象的那样,这可能(并且确实)需要很长时间。即使是 5Mb 也需要大约一分钟才能通过此链接传输。

在编写自己的引擎时,确定需要复制的内容(使用项目更改时的时间戳),找出冲突解决方案(如果同一记录在复制期间的两个地方发生更改会发生什么)等等。这并不容易。

于 2010-08-11T07:56:59.163 回答
0

我的建议是在本地使用 MS 访问,并在一定时间间隔后不断更新数据到服务器。将更新的列添加到每个表。添加或更新记录时,设置更新的列。对于删除,您需要有一个单独的表,您可以在其中放置主键值和表名。同步获取未设置更新字段的所有本地记录并将其更新(修改或插入)到中央服务器。使用本地已删除表删除所有记录,您就完成了!

我假设您的中央服务器仅用于收集数据。

于 2010-08-10T12:41:31.177 回答
0

我目前使用为 Web 同步配置的 SQL Server 合并复制完全按照您的描述进行操作。我让我的代理按 1 分钟的时间表运行,并取得了成功。

您看到什么样的错误消息?

于 2010-08-31T06:55:16.240 回答