一开始我要为过度使用粗体字表示歉意。我想简化对我长问题的理解方式。
我在多次访问数据时遇到问题。
我必须实现以下问题:我有一个服务器应用程序SERVER_A(基于 TIdServer),有许多(大约 100 个)TCP 连接。这些连接中的每一个的目标是:
- 从CLIENT获取状态消息(每 2-5 秒)。状态包含 3 个存储为文本的双数字。
- 从SERVER_A 向CLIENT发送答案- 获得状态后
这些状态(大约 100 个)必须保存在 Firebird 数据库表 - TABLE中(我曾经这样做过 AnyDAC)。每个CLIENT都有其编号和TABLE中的记录。
另外三个本地网络客户端应用程序 - LOCAL_APPLICATIONS也必须有权访问TABLE。他们必须可视化来自TABLE的统计数据。
LOCAL_APPLICATIONS有时必须更改TABLE的记录之一。结果,必须通过SERVER_A的TCP 连接将这些更改传递给正确的CLIENT作为响应。
问题在于这种解决方案的效率是否达到。
到目前为止,每个 TCP 调用都将数据单独写入TABLE导致 Firebird 大量过载,并且LOCAL_APPLICATIONS执行的任何操作 都非常缓慢。
因此我可以问:正确的方法是在SERVER_A中构建一个LOCAL_ARRAY并从所有 TCP 连接中收集数据,并以固定的时间间隔(例如每 2 秒)将所有这些数据定期保存在TABLE中吗?如果是这样,如何进行有效的数据同步:时间更改LOCAL_ARRAY上的锁并在从中读取数据时锁定它以将数据保存在TABLE中?
也许更好的是对每个连接状态都使用单一变量,然后使用LOCAL_ARRAY以避免在 从一个CLIENT插入数据期间锁定LOCAL_ARRAY中的每个字段?但这不是灵活的解决方案。
我的想法对提高效率有好处吗?或者更确切地说不是?有什么更好的解决方案?
问候阿蒂克