Database Delphi解决方案,用于在松散连接的两个远程站点之间进行数据复制

Database Delphi解决方案,用于在松散连接的两个远程站点之间进行数据复制,database,delphi,database-replication,Database,Delphi,Database Replication,我正在使用Delphi XE4 Architect(Delphi Xe3也可以) 我需要找到以下问题的智能解决方案 我想使用这些框架之一:kbmMW或RemOjects SDK/DataAbstract或RealThinClient 目前,我在站点a上有一个使用非常简单的MSSQL数据库的应用程序,该应用程序由站点B的用户通过远程桌面使用。 应用程序有时需要显示一些图片,也需要查看一些PDF,但它主要是文本数据输入 我没有特别的理由使用MSSQL, 但这是一个我发现已经处于活动状态并已填充的数据

我正在使用Delphi XE4 Architect(Delphi Xe3也可以) 我需要找到以下问题的智能解决方案 我想使用这些框架之一:kbmMW或RemOjects SDK/DataAbstract或RealThinClient

目前,我在站点a上有一个使用非常简单的MSSQL数据库的应用程序,该应用程序由站点B的用户通过远程桌面使用。 应用程序有时需要显示一些图片,也需要查看一些PDF,但它主要是文本数据输入

我没有特别的理由使用MSSQL, 但这是一个我发现已经处于活动状态并已填充的数据库,我自己还没有构建它。 现在,改变它将变得复杂。 (数据库不重要,不使用特定功能、存储过程或触发器)

站点B的用户通过网络连接到站点A的速度非常慢 有时,连接在几个小时甚至一天内都不可用(这是主要问题)。 不幸的是,由于各种原因,连接的情况无法得到改善

数据库非常简单,有许多几乎从不改变的表, 大约有10家公司每天都在进行更新,可能会受到竞争性变化的影响

这些表的记录主要包含在更新中锁定的数据 从单个用户编辑一些字段,然后他保存并释放锁

我想得到一些非常不同的东西来优化性能

网站的用户具有更高的优先级,他们更重要,因为网站是总部

我想要一份从站点a到站点B的数据库副本, 因此,站点B的用户可以在本地工作,速度更快,而无需使用连接到站点A的远程桌面。 RDP协议不是很优化,在任何情况下,如果没有连接,用户都无法工作

同步和更新两个数据库之间的数据库锁定记录可能不是什么大问题


基本上,当站点B的用户获取数据库B中的编辑记录时, 显然,站点a的用户不能修改站点a数据库中的相同记录。 当然,这也应该起到相反的作用

我最大的问题是弄清楚如何最好地处理发生的情况 当B和A之间的连接在几个小时内不可用时。(站点B上的交易/事件正在增加)。 站点A上的事件通常优先于站点B上的事件(碰撞时)

站点B的用户必须能够继续工作。 当连接处于活动状态时,应将更改发送到站点A的数据库。 显然,这可能会导致冲突,但记录上的更改 可能由用户B放弃,也可能在选择性合并的监督下完成 和现场B记录用户的批准记录

好吧,我希望这个场景能解释清楚

其他信息:

  • DB模式非常简单,只有表,没有触发器和存储过程。因此,我可以构建一个作为示例,但想象一下10个表可以并发更新

  • DB由销售部门的桌面应用程序使用,因此它包含大多数机密数据

  • 远程连接通常最大为512Kbit,但这里的主要问题是连接有时可能不处于活动状态 远程站点上的用户无论如何都必须工作。这是重点

  • 每日更新的总数据最大可压缩为10 Mb,仅适用于DB连接。还有一些其他数据被同步 在相同的连接上,但它们不是此工作的一部分

  • 我不想使用特定的MSSQL工具或服务(复制等),因为DB将来可能会改变


感谢

我们使用Delphi客户端应用程序,一个基于kbmMW的Delphi服务器应用程序,MSSQL数据库(尽管它过去在DBISAM数据库上也能很好地工作)来完成这项工作

我们有一些只允许总部网站用户修改的表。每次“合并”时,较小的表都会被完整地传输。较大的表和交易类型表都有一个日期添加和/或日期修改字段,并且仅传输在过去3周左右(可配置)中更改或添加的记录。这意味着,即使站点已经断开连接一段时间,它们仍然可以更新到最新的数据-我们过去在远程位置的客户端使用可疑的拨号线路

我们一天只运行一到两次合并例程,但它在每小时或其他时间安排上都同样有效

在一天中的给定时间,每个站点(包括总部)将其更改/新记录“导出”到文件中(例如客户数据集表或类似文件)。然后,应用程序将这些文件压缩并放入“传出”文件夹中。zip文件的命名基于位置id、日期、时间等。文件通过一些外部方式传输,例如通过FTP/文件共享/电子邮件等。每个分支机构向总部发送/传输其数据文件,总部向每个分支机构传输其数据。文件通过任何方式传输到“传入”文件夹

每个位置定期(如每小时)检查传入文件夹,以查看是否有任何新内容可供导入。如果是这样,它将添加所有新记录,分支机构位置将用新记录覆盖总部数据表,并以“某种方式”合并编辑的记录。这是棘手的一点。最简单的策略是“总部获胜”,因此所有编辑都被接受,除非存在冲突,在这种情况下,总部版本获胜。或者,您可以使用“上次编辑的wins”-但您需要确保时钟在不同位置同步。另一种选择是在某种形式的“悬念”状态中添加冲突记录,让我们结束