SQL或代码:表快照和当前表之间的区别;哪个更有效率?

时间:2016-05-02 08:14:00

标签: sql delphi

我需要在给定时间拍摄表格的快照,并确定快照和当前数据之间的差异。最有效的方法是什么?可以在纯SQL(MS SQL)中完成,还是我的应用服务器在Delphi代码中执行此操作?

我正在使用跟踪这些变化的应用服务器,并通过Telnet协议将它们传输到同一台机器上的任意数量的客户端。

由于txt协议,我必须使用表的不同之处,因为每次发生变化时发送所有数据(~10k记录)是不切实际的。

所涉及的应用程序是Swordfish(自动交易系统/ ATS),不是我写的。应用服务器(Chef)和客户端(Diner)都是我写的。 ATS使用MS SQL作为其API的层,因此Chef向MS SQL服务器发送和接收数据,主要是控制ATS。客户端将它想要做的事情传达给Chef,然后Chef通过DBMS和其他Diners通过Telnet与Swordfish进行通信。

1 个答案:

答案 0 :(得分:0)

代码。这是最有效的方法。 根据我在网上找到的所有信息

有可能用纯SQL知道添加了哪些行,但我找不到任何东西(在SQL中)来检测对已经存在的行或行删除的更改,这两者我都需要知道保留我的应用服务器(知道并与SQL表同步并且我的应用程序客户端同步。

保留10-15k记录的内存表并不严重,我的代码中的一个不同的错误(与TFDQuery有关)使我认为我的"离线"或者"在记忆中"快照操作所需的表大量内存(每个sql add命令创建它自己的TFDQuery实例,每个记录在销毁TFDQuery时泄漏30mb,现在我创建一次TFDQuery实例,并重用该实例添加的每条记录,我的内存使用总量保持在50mb左右,我没有问题)

因此,每次Service Broker检测到sql表的数据集发生变化时,我都会将旧数据集保存到内存表中,并在数据集和数据集之间进行3次比较(数据集已保存/旧和数据集当前/最新版本的SQL表)。 1.扫描添加。 2.扫描更改。 3扫描删除,完成: - )

然后它的'编写Telnet协议文本的简单任务,我的所有客户端和我的SQL服务器以及我的应用服务器都很高兴同步!