Delphi 2010 Datasnap - 设计查询

5

我正在研究将一个基于SQL的Delphi桌面应用程序迁移到多层薄客户端,一直在考虑使用Delphi 2010中的Datasnap。我已经阅读了Bob Swart撰写的白皮书,并进一步扩展了这个内容。

我的主要问题是,由于需要运行多个查询并保持打开状态以查询数据,我希望使服务器端在连接和SQL查询方面更加高效。是否有人可以指导我如何设计真实世界的Datasnap服务器应用程序,因为演示不够详细。

谢谢 Matt

1个回答

1

在你的设计中,你必须做出决定:

  • (中间件)将管理会话或客户端将识别其会话每个连接(有状态 vs 无状态)

  • (中间件)您希望拥有多少缓存数据。您可以仅缓存一些烦人的非常稳定的表,并在它们更改时仅查询它们(如果所有修改都是通过中间件进行的,如果不是,则需要在表上标记任意标记 - GUID、计数器 - 以匹配数据是否更改)。

  • (客户端/中间件)如果您的客户端始终会获取完整的数据集合还是只获取数据集合的片段。 (例如:产品可能具有categoryId列,该列是指向类别表的FK。您可以始终发送两者或客户端仅请求产品数据)。

  • (中间件/RDBMS)您可能必须提供某种形式的自定义搜索。如果您了解最常用的搜索条件的线索,则可以提供(如果需要)覆盖执行该操作的索引。

  • (中间件/RDBMS)不要将大型数据集带到中间件,除非您计划对数据进行一些积极的缓存和/或对它们有一些很好的用途。中间件只是RDBMS的另一个客户端应用程序 - 如果两者在同一台机器上,则可以进入内存/CPU/IO竞争与RDBMS。

  • (中间件/RDBMS)在中间件上执行业务规则是许多纯粹主义者的口头禅。对我来说,平衡是关键。假设RDBMS有2000个存储过程(我没有夸张,有真正的业务使用这样数量的SP),而您的中间件可以在1500个由SP解决的问题上做出出色的工作,那么请继续做。但是,如果最后的500个可能会变得更糟,请让它们独自一人。这可能比1500个更麻烦。因此,混合两者,并将这500个软件项目制作为另一个版本。

  • (中间件/RDBMS)我所说的存储过程也可以应用于触发器和其他任何可以使您的生活更轻松的RDBMS服务器功能。

  • (中间件/DataSnap)大多数粗略的细节可以交给数据集提供程序。但是,在需要时学习利用OnBeforeUpdateRecord事件进行自定义处理。

  • (中间件/DataSnap)您知道您可以通过以下代码仅创建包含修改数据的ClientDataset吗?您无法想象它有多有用... :-)

    Cds_New.Data := Cds_Updated.Delta;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接