我正在使用 Delphi XE4 Architect(Delphi Xe3 也可以)我需要找到解决以下问题的智能解决方案,并且我想使用以下框架之一:kbmMW 或 RemOjects SDK / DataAbstract 或 RealThinClient
目前,我有一个应用程序在站点 A 上使用一个非常简单的 MSSQL 数据库,站点 B 的用户通过远程桌面使用该数据库。该应用程序有时需要显示一些图片并查看一些PDF,但它主要是文本数据输入。
我没有特别的理由使用 MSSQL,但我发现它是一个已经激活并填充的数据库,而且我还没有自己构建它。而现在,改变它会很复杂。(数据库不重要,不使用特定功能、存储过程和触发器)
站点 B 的用户通过非常慢的网络连接连接到 A 站点,并且偶尔连接不可用几个小时甚至一天(这是主要问题)。不幸的是,由于各种原因,连接的情况无法得到改善。
该数据库非常简单,有许多表几乎不会更改,大约有十个表每天都进行更新,并且可能会受到竞争性更改的影响。
主要是这些表的记录包含被锁定在更新中的数据,单个用户编辑某些字段,然后他保存释放锁。
我想得到一些非常不同的东西来优化性能。
A站点的用户优先级更高,他们更重要,因为A站点是总部。
我想将站点 A 的数据库复制到站点 B,以便站点 B 的用户可以在本地工作,速度更快,而无需使用连接到站点 A 的远程桌面。RDP 协议不是很优化并且在任何情况下,如果连接不存在,用户将无法工作。
在两个数据库之间同步和更新数据库锁记录可能不是什么大问题。
基本上,当站点 B 的用户在数据库 B 中获取编辑记录时,显然站点 A 的用户不应该能够修改站点 A 数据库上的相同记录。这也应该在相反的方向上起作用课程。
我的大问题是弄清楚如何最好地处理当 B 和 A 之间的连接在几个小时内不可用时发生的情况。(并且站点 B 上的事务/事件正在增加)。站点 A 上的事件通常优先于站点 B 上的事件(碰撞)。
站点 B 的用户必须能够继续工作。当连接变为活动状态时,应将更改发送到站点 A 的数据库。显然这会导致冲突,但可能由用户 B 对记录所做的更改可以被丢弃,或者可以在选择性的监督下完成由站点 B 的记录用户合并和批准记录。
好吧,我希望这个场景几乎解释清楚了。
附加信息:
DB schema 很简单,只有表,没有触发器,存储过程。所以我可以构建一个作为示例,但想象一下可以并发更新的 10 个表。
DB被销售部门的桌面应用程序使用,因此它包含大多数秘密数据。
远程连接通常最大 512Kbit,但这里的主要问题是连接有时可能不活跃,远程站点上的用户无论如何都必须工作。这是主要的焦点。
每日更新的总数据最大为 10 Mb,压缩后仅用于数据库连接。在同一连接上同步了一些其他数据,但它们不属于此作业。
我不想使用特定的 MSSQL 工具或服务(复制等),因为 DB 将来可能会发生变化。
谢谢