关系应用程序数据的并发更新
Concurrent updates of relational application data
我们有一个Qt C++Gui应用程序,它基本上是一个终端到服务器(TCP)软件,控制它并显示它的数据。
问题是来自服务器的数据是高度相关的数据。在SQL术语中,大约10-15个表都通过一些外键互连
这些数据由服务器更新,并且必须(同时)由GUI显示。
目前的解决方案是,我们将所有数据存储在(基本上)具有适当锁定(读/写)的映射和结构中,以避免并发访问的问题。
我们现在面临的问题是,这种解决方案的规模不是很好。应用程序的性能(点击屏幕上发生的事情延迟)变得更差。
使用应用程序中的关系数据库系统(比如带有内存中数据库的sqlite)会有帮助吗?使用数据库(在查询时解决关系依赖关系)是否比使用结构映射(在插入时解决关系依存关系)更好地扩展?
我希望我把我的问题说得尽可能清楚。
谨致问候,Andre
更清楚地说:这是关于GUI不再响应,因为服务器的许多更新锁定了数据结构。
(基于说明实际问题的更新注释,UI线程块)
这里有两个简单的修复程序可以提供帮助。第一个问题是在锁定共享数据结构之前对所有传入数据进行预处理。例如,如果映射中有std::string
,请不要在锁定映射的同时将const char*
转换为std::string
。这将在保持UI线程的同时调用strlen
。相反,请先转换,然后锁定贴图。
第二个改进是锁定GUI的时间更短。如果更新可以划分为多个较小的部分,请重复获取和释放锁定。这意味着实际的更新速度较慢,但UI的响应能力更强。
一个更复杂的策略(如果分区不可能的话)是分段。在新映射中创建所有新条目,然后合并这两个映射。这基本上是类固醇的预处理,因为你现在也排序新的条目。(我希望你正在与服务器交换diff,而不是每次都对数据进行完全刷新!)
- 从C++本机插件更新Vector3数组
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- 控制允许动态运行c++的并发操作数
- cmake更新缓存的变量
- 更新到莫哈韦后出现cmath错误
- 节俭并发:未解决的外部问题
- OpenMP:并行更新数组总是需要减少数组吗
- 为什么我的变量没有更新,我的 LED 没有亮起?
- 指针没有更新它在void函数内部指向的值
- 如何在c++中获取要更新的值
- 已修改的LinkedList未在文本文件本身中更新
- Qt:当QListView获得新条目时,如何更新QStringList
- 更新的矢量元素不打印
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 如何在ECS框架中更新组件数据和通知系统
- 从VS 2015更新3更新到VS2015更新3 d后浮点计算行为不同的原因
- 如果我想在没有更新编译器的情况下使用新功能,该怎么办?
- 并发/多线程:是否可以以这种方式生成相同的输出?
- 如何在 C++11 中查找和更新向量中的一个嵌套结构
- 关系应用程序数据的并发更新