Delphi 2010 Datasnap - 设计查询

标签 delphi delphi-2009 delphi-2010 datasnap

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

我的主要问题实际上是,我希望在连接和 SQL 查询方面提高服务器端的效率,因为多个查询正在运行并同时保持打开状态来询问数据,任何人都可以为我指出指导方向关于如何设计现实世界的 Datasnap Server 应用程序,因为演示没有提供足够的细节。

谢谢 马特

最佳答案

您必须在设计中做出决定:

  • (中间服务器)将管理 session 或客户端将识别每个连接的 session (有状态与无状态)

  • (中间服务器)您希望拥有多少缓存数据。您可以缓存一些烦人的非常稳定的表,并且只在它们更改时查询它们(如果所有修改都是通过中间服务器进行的,如果不是,您需要在表上添加任意标记(GUID、计数器)之类的东西来匹配数据已更改)。

  • (客户端/中间服务器)如​​果您的客户端始终获取完整的数据集合或仅获取集合的片段。 (例如:产品可以有一个categoryId列,它是Category表的FK。您可以一直发送这两个列,或者客户端可以仅请求产品数据)。

  • (中间服务器/RDBMS)您可能必须提供某种形式的自定义搜索。如果您知道最常用的搜索条件,您可以提供(如果需要)索引覆盖来执行此操作。

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

  • (中间服务器/RDBMS)在中间服务器上执行业务规则,是许多纯粹主义者的口头禅。对我来说,平衡是关键。假设 RDBMS 有 2000 个存储过程(我并没有夸张,如此多的 SP 是有实际用途的),而您的中间服务器可以出色地解决 SP 解决的 2000 个问题中的 1500 个问题,这太棒了。但如果最后 500 场比赛可能会带来最坏的情况,那就别管他们了。它可能比 1500 更麻烦。因此,将两者混合起来,并将这 500 个作为另一个版本的软件项目。

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

  • (Mid-Server/DataSnap)大部分粗略的细节都可以交给数据集提供者。但要学会在需要时利用 OnBeforeUpdateRecord 事件进行自定义处理。

  • (Mid-Server/DataSnap)您知道只能通过修改数据来创建 ClientDataset 下面这种代码?你无法想象它有多么有用......:-)

    Cds_New.Data := Cds_Updated.Delta;

关于Delphi 2010 Datasnap - 设计查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2828435/

相关文章:

delphi - 如何获取屏幕右上角的表单位置?

delphi - 如何从项目中查找并删除未使用的 Delphi 包

delphi - 控制台应用程序中的 TIdTCPServer.OnExecute

delphi - 获取特定 Twitter 用户的推文?

delphi - 迁移到 Delphi 2009 - 无效类型转换错误

delphi - Delphi 2010 中的代码完成速度是否有所提高?

delphi - 谷歌地图非网络访问

delphi - 如何使用OpenToolsAPI在源代码编辑器中获取特定的行字符串(UTF8)或特定的行字符串长度

delphi - 消息队列中的访问被拒绝

delphi - 为什么 AsyncCall 在主线程中运行?