Delphi的数据库同步解决方案

时间:2011-04-26 15:17:43

标签: delphi database-design database-replication

我正在寻找一些起点,将Win32 Delphi应用程序的数据与Web应用程序的远程数据库集成。

该项目打算解决的问题:

1)桌面在vpns上表现不佳。远程办公室的用户可以使用网络应用程序。

2)有些公司更喜欢将网络应用添加到桌面应用

3)移动设备可能会将Web应用程序作为前端。

我发现的问题:

Web应用程序将在基于Unix的系统上运行,可能是Linux,而桌面应用程序使用NexusDB,而Web应用程序可能是Postgres。不同的平台和数据库。

使用Delphi,似乎Microsoft Sync Framework不适用于此项目。

我的第一个想法是为Web应用程序提供标准REST API,并让桌面应用程序点击API,就好像它是一个客户端,每隔n分钟从本地数据库服务器。我已经看到了很多问题!

4 个答案:

答案 0 :(得分:6)

理查德,我之前一直沿着这条路走下去,我只能说它不要做!我曾经在一家公司工作,这家公司在DBISAM上运行一个大型的Delphi桌面应用程序(超过250种表格)(非常类似于你所拥有的)。客户需要一个“Web”界面,以便人们可以远程工作,然后让Web应用程序和桌面应用程序同步更改。好吧,几年后,应用程序非常糟糕 - 数据问题和用户工作流程非常糟糕,因为在两个不同的地方管理相同的数据是一场噩梦。

我建议将数据库移动到像MySQL这样的东西(Delphi和Web Client都可以),并在两个接口之间使用一个数据库。 Delphi客户端在VPN上工作不正常的原因是,NexusDB和DBISAM等桌面数据库在运行查询时会复制管道上的大量数据(撤回所有数据,然后过滤/下载等) - 这不是真的客户端/服务器,如SQL Server或MySQL,其中所有繁重的工作都在服务器上进行,只有结果返回。当然,将Delphi应用程序移动到像MySQL一样的数据库可以将速度问题全部提升到一起 - 但是你没有用它来解决#2和#3。

另一个选择是将整个应用程序移动到Web,并且只有一个应用程序需要支持。当然,像Delphi这样的工具中的优秀UI开发人员总能为Web应用程序创建出色的用户界面 - 尤其是在数据输入繁重的应用程序中 - 因此可能不适合您。

我会非常厌倦“同步数据”。

我的价值2美分。 麦克

答案 1 :(得分:5)

如果您使用RESTful based ORM,您可以同时使用AJAX和Client Delphi应用程序调用相同的Delphi服务器,使用JSON作为传输格式,使用HTTP / 1.1作为远程连接层,使用Delphi和Javascript对象访问数据。

例如,如果您在浏览器中输入http://localhost:8080/root/SampleRecord,则会收到以下内容:

[{"ID":1},{"ID":2},{"ID":3},{"ID":4}]

如果你要求http://localhost:8080/root/SampleRecord/1,你会得到:

{"ID":1,"Time":"2010-02-08T11:07:09","Name":"AB","Question":"To be or not to be"}

如果您对JavaScript有所了解,任何AJAX应用程序都可以使用它。

在任何客户端HTTP / 1.1应用程序中都可以使用相同的HTTP / 1.1 RESTful请求(GET / POST / PUT / DELETE / LOCK / UNLOCK ...)。该框架使用very fast kernel-mode http.sys(比Windows上任何其他HTTP服务器更快)和快速HTTP API for the client实现服务器。您甚至可以使用HTTPS来处理安全连接。

恕我直言,使用这样的ORM比仅使用数据库连接更好,因为:

  • 它将更严格地遵循n-tier原则:业务规则在Delphi服务器中写入ONCE,并且您只使用业务对象的服务和RESTful操作;
  • 它将使用HTTP / 1.1进行连接,这种连接比任何直接数据库连接都更快,更标准,并且可以通过HTTPS强大保护;
  • 基于HTTP的JSON和RESTful是AJAX应用程序的事实标准(即使Microsoft将其用于WCF);
  • 数据将使用JSON传输,这是一个非常好的多个前端格式;
  • 无状态方法使其非常强大,即使在未连接模式下也是如此;
  • 使用数据库的本地小型复制(我们鼓励SQLite)允许您以非连接模式(对于Delphi客户端或HTML 5客户端)访问客户端。

答案 2 :(得分:2)

我建议您有一个数据库和两个前端(为后端工作调用SOAP方法的Web UI,Delphi中基于SOAP方法调用的富客户端,以及实现SOAP可访问方法的SOAP服务器层,其中包含你的业务逻辑。)

根据您所描述的内容,您认为复制只会加速您的速度,但它会做什么反而会减慢您的速度并使您产生复制,连贯性和关系完整性问题,必须手工整理(由你)。

答案 3 :(得分:1)

查看this

  

CopyCat是一个数据库复制   引擎,写为组件集   Embarcadero Delphi。 CopyCat一直都是   自2004年以来一直在生产中使用   非常稳定。这是每天依赖的   由一些从小到大   应用范围的企业   从站点间同步,   巡回工作,数据库备份和   更多。我们相信它可以   满足您的需求。请继续阅读...