我正在编写一个监控某些统计信息的QT应用程序。在主窗口中,您可以选择多个(或仅一个)项目并为它们打开图形窗口。每个项目都从不同的线程进行轮询。
每次我获取数据时,它都是在SQLite数据库中编写的,但我遇到了一个问题:
我在具有SSD驱动器的计算机上制作此应用程序并且运行正常,但是当我在具有HDD的计算机上运行它时,应用程序崩溃(崩溃发生在QT sqlite dll文件 - qsqlite.dll中)。我搜索了这个问题,发现很多人都说sqlite不推荐用于此类用途。我在写入数据库时也使用QMutex来锁定/解锁部分,但不幸的是它无法解决问题。
有没有办法可以使用sqlite,或者我是否必须寻找不同的数据库,例如postgres?
感谢您的时间!
答案 0 :(得分:1)
我从未在一个应用程序中成为多个数据库连接的粉丝。
在您的情况下,我会为所有write-SQL语句实现一个队列(FIFO),并通过一个连接将它们发送到数据库。由于您将从多个线程写入队列,因此您必须使用互斥锁等来保护对队列的写入。
这样,代码中唯一的线程争用就是SQLite驱动程序不必太努力。
我还会考虑从读取查询缓存数据,因此您只需要请求您尚未拥有的数据。也就是说,请求最近的100个值并将它们保存在数组或列表中,然后当您下次请求值时,只请求数组中最后一个值的值。