使用线程访问数据库
Database access with threading
我正在开发一个程序(使用在Linux机器上运行的c++),使用SQLite作为后端。
它有2个线程执行以下任务:
- 线程1
- 等待数据到达(在这种情况下,通过无线电模块)
- 立即将其插入数据库
- 返回等待新数据 重要的是,这个线程是"监听"尽可能多的时间,而不是阻塞等待插入到数据库
- 每2分钟在数据库上运行一次SELECT,查找未处理的数据
- 处理数据
- 用一个标志更新获取的行,以显示它们已被处理
关键是要确保线程1总是可以插入数据库,即使这意味着线程2无法进行SELECT或UPDATE(因为这可能只是在将来的某个点发生,时间并不重要)。
我希望找到一种方法,以某种方式使用SQLite来优先考虑insert,但到目前为止还没有找到方法。另一个想法是线程1将它的数据推入一个基本队列(保存在内存中),然后每隔一段时间批量插入它(因为这不会阻塞数据的接收,并且可以做一个简单的检查,看看数据库是否被锁定,如果是,等待几毫秒,然后再试一次)。
然而,用SQLite和c++线程做这件事的"正确"方法是什么?
SQlite数据库可以在是否支持多线程的情况下打开。两个线程应该分别打开数据库。如果您想采用比较困难的方法,您可以使用优先级队列来处理查询。
相关文章:
- 使用 Qt5 SQL 进行异步数据库访问的策略
- 根据用户名和密码 Qt C++重新访问数据库值
- 缓存和访问数据库数据的有效方法?
- 可以删除SQLite3数据库文件,并且仍然可以访问
- 没有绝对路径无法访问数据库
- 使用连接器 c++ 访问 MYSQL 数据库(如何将路径添加到我的标准搜索目录)
- 访问数据库-QODBC驱动程序在管理员上执行授予
- 如何从Qt使用密码访问Sqlite数据库
- 如何为数据库设置密码,以便没有人可以访问它
- 如何使用QT/C 中的多线程用API访问我的数据库
- 数据库访问对象设计模式
- 从多个进程和SQLite_BUSY访问SQLite数据库
- 无法从我的二进制文件访问远程服务器中的数据库
- C++ 中的数据库访问
- C++用于管理对数据库的访问的类
- 在 iOS 上使用C++访问 SQLite 数据库
- 使用SOCI c++数据库访问库的提升元组行集出现问题
- 是否可以使用SOCI c++数据库访问库管理表关系
- c++ /SQLite -数据库访问与多进程
- (Neessitas)Microsoft sql数据库访问在打开时出错