所有s / w都是基于Windows的,用Delphi编码。
有些人提交了一些数据,我通过TCP发送到运行MySql的数据库服务器。
其他一些人为他们的数据添加通过/失败并更新数据库。
第三组正在查看报告。
现在,第一组可以看到他们提交的内容的历史记录。当第二组添加通过/失败时,我想更新其历史记录。我的选择似乎是
1似乎效率低下。 2似乎更好。 3减少了TCP流量,但这并不多。无论如何,每个只有几个字节。但是,它的缺点是双方现在都是TCP客户端和服务器。
同样,如果第三组的成员正在查看报告并且前两个组中的任何一个的成员更新数据,我希望在报告中反映这一点。这是最好的方法吗?
我想有两件事需要考虑。最重要的是,减少网络流量,不那么重要,使我的代码更简单。
我确信这是一种非常常见的模式,但我对这种事情不熟悉,所以欢迎提出建议。提前谢谢。
[更新]关闭选民,我用google搜索&无法找到答案。我希望得到你的经验。你能帮我改一下这是可以接受的吗?或者给一个能帮助我的UTL?感谢
答案 0 :(得分:3)
简答:使用通知(选项3)。
长答案:这是一个使用面向消息的中间件传播更改的中间层的用例。这将消息传递逻辑与数据库元数据(触发器/存储过程)分离,可以使用对等和发布/订阅通信模式等。
我在
上写了两篇关于此事的文章这篇文章是关于Firebird的,但建议的解决方案可以应用于任何应用程序/数据库。
在您的方案中,即使数据库或Delphi部分已关闭,客户端也可以使用中间件消息代理向系统发送消息。消息将在代理中排队,直到系统的其他部分重新联机。如果有许多客户端并且需要更新安装或维护窗口,这是一个优势。
同样,如果第三组的成员正在查看报告并且a 我希望前两组中任何一组的成员更新数据 在报告中反映了这一点。这是最好的方法吗?
如果这是一个真正的要求(报告通常是数据的不可变“快照”,但也许你的意思是需要在观看时更新的视图,类似于股票报价)但是它很容易实现 - 客户只需要“订阅”一个宣布相关数据变化的信息渠道。使用现有的消息代理功能(如消息选择器和目标通配符)可以非常灵活地节省资源并节省资源。 (请注意,我是开源消息代理的一些Delphi和Free Pascal客户端库的作者。)
相关问题:
答案 1 :(得分:0)
在某些情况下,您提出的每个解决方案都是可行的。
我已经写了很长时间的软件,下面的评论与个人经历有关,可以追溯到1981年。我毫不怀疑其他人会有其他意见,也会回答你的问题。
请允许我证明每种方法的正面和负面以及每条评论的参数。
“定期盲目刷新历史记录(在Delphi中,我在数据库网格上显示,然后关闭然后打开查询),但这似乎效率低下。”
“如果在最后X分钟内发生任何变化,请定期询问数据库服务器。”
“从不轮询数据库服务器,而是让它在发生变化时通知用户的应用程序。”
那么,您认为现在正确的做法是什么?