【发布时间】:2015-04-13 10:24:13
【问题描述】:
我们有一个 Qt C++ Gui 应用程序,它基本上是服务器 (TCP) 软件控制它并显示其数据的终端。
问题是来自服务器的数据是高度相关的数据。 在 SQL 术语中,大约有 10-15 个表都通过一些外键相互连接
此数据由服务器更新,并且必须(同时)由 GUI 显示。
目前的解决方案是我们将所有数据(基本上)存储在具有适当锁定(读/写)的映射和结构中,以避免并发访问问题。
我们现在面临的问题是这个解决方案不能很好地扩展。应用程序的性能(点击屏幕延迟发生的事情)变得更糟。
使用应用程序中的关系数据库系统(例如带有内存数据库的 sqlite)会有帮助吗? 使用数据库(在查询时解决关系依赖关系)是否比使用结构映射(在插入期间解决关系依赖关系)更好的扩展?
我希望我尽可能清楚地说明我的问题。
问候, 安德烈
为了更清楚:这是关于 GUI 不再响应,因为来自服务器的许多更新锁定了数据结构。
【问题讨论】:
-
问题:用户在 GUI 中输入命令,然后发送到服务器,服务器响应更多数据(基于查询)?
-
我担心“锁定”是指从客户端向服务器发送锁定请求,以锁定成功/失败响应,成功后继续更新?因为这解释了缓慢。
-
啊,好吧,还不清楚...忽略客户端对服务器所做的事情。这都是关于来自服务器的数据。处理数据(将其放入正确的地图中)实质上会阻止 GUI 线程进行绘制。一个因此的问题:在这种情况下,RDB 会有所帮助吗
-
不,不会。数据以“原始”形式出现:您将转换为 SQL +
INSERT+SELECT+ GUI 适应开销,只是为了显示一些东西。使用线程收集数据,然后提醒 GUI。 -
我们目前正在使用多个线程(1 个用于 GUI 绘图)和一个事件线程来处理传入事件。但是数据结构的锁定正在扼杀我们的性能。
标签: c++ qt data-structures concurrency relational-database