sqlite:多线程操作数据库“database is locked”解决方法(二)
上一篇博客《sqlite:多线程操作数据库“database is locked”解决方法》通过注册延时函数的方法来处理数据库被锁的问题。此方法固然能解决问题,但是在多个线程向数据库写入大量数据的情况下,延时会拖慢进度。
想出方法二:
1. 创建一个链表,链接如下格式的结构体,线程1,线程2,线程3......不直接改写数据库,而是把sql语句插入链表中;
typedef struct {
uint8_t *buf;
uint32_t len;
} sqlItem_t;
2. 创建一个独立的线程,专职从链表中读取sql语句,对数据库进行改写。
这样只有一个线程对数据库进行操作,数据库被锁的问题即可避免了,对数据库的处理效率也大大提高。
3. 使用事务进一步提高sqlite处理性能
思路如下:
执行"begin transaction;"语句
执行多条insert/update/delete/...语句
执行"commit transaction;"语句
sqlite:多线程操作数据库“database is locked”解决方法(二)的更多相关文章
- sqlite:多线程操作数据库“database is locked”解决方法
1. 使sqlite支持多线程(不确定是否非加不可,暂且加上,以备后患) 可以在编译时/启动时/运行时选择线程模式,参考:http://www.cnblogs.com/liaj/p/4015219.h ...
- PHP PDO sqlite ,Unable to Open database file的解决方法
t.php在网站的根目录. fdy.db在inc文件夹下; t.php中sqlite路径写成相对路径 $db = new PDO('sqlite:inc/fdy.db'); 开始提示 Fatal er ...
- python 多线程操作数据库
如果使用多线程操作数据库,容易引起多用户操作锁表 OperationalError: (2013, 'Lost connection to MySQL server during query') 使用 ...
- php多线程操作数据库(转)
PHP用pcntl可以实现多线程操作数据库.直接上代码,逻辑自己研究喽. 示例代码为: /** * 并发多线程运行任务,把任务拆解成区块,用多线程去并发执行 * @param callable $ex ...
- mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法!
mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法! 修改mysql5.7的配置文件即可解决,方法如下: linux版:找到mysql的安装路径进入默认的为/usr/shar ...
- windows下oracle数据库报错ORA-12705解决方法
转自:http://blog.sina.com.cn/s/blog_16eaf6b940102x66q.html 有个朋友,他们那边windows虚拟机重启后,数据库不能起来报错ORA-12705无法 ...
- sqlite 报错:database is locked
在sqlite批量添加数据时,报错:database is locked. 解决办法:将db路径由相对路径设置为绝对路径.
- SQLITE 多进程查询出错database is locked
程序比较简单: 父进程查询数据库A表,没有更新操作 子进程同时查询数据库A表,查询出来的内容更新B表. 两个进程都放到while(1)循环中,速度慢的话就是2S执行一次就没有错,执行的速度快的话就会报 ...
- svn: E200033: database is locked解决办法
svn执行update,却被告知database is locked! 执行 svn update,却抛出个错误警报: svn: E200033: database is locked, execut ...
随机推荐
- Java多线程之新类库中的构件DelayQueue
DelayQueue 是一个无界的BlockingQueue,用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走.这种队列是有序的,即队头对象的延迟到期时间最长.注意:不 ...
- Excel常用函数大全
1.ABS函数 函数名称:ABS 主要功能:求出相应数字的绝对值. 使用格式:ABS(number) 参数说明:number代表需要求绝对值的数值或引用的单元格. 应用举例:如果在B2单元格 ...
- js监听浏览器关闭事件
html : <HTML> <HEAD> <title>test</title> </HEAD> <body onbefore ...
- TestNG运作报错An interanl error occurred during:"Launching first"
备注:我建的类名就叫做“first” 解决办法:卸载掉TestNG M2E Help-->Install new software-->What is already installed? ...
- Windows程序设计-窗口和消息
本章内容比较少,没有代码类的内容,这里付思维导图一章,看起来比较清晰.
- (转)WebApi自动生成在线文档Swashbuckle
原文地址:http://www.cnblogs.com/Arrays/p/5146194.html?utm_source=tuicool&utm_medium=referral 1.前言 1. ...
- Linux场景下的辅助命令操作汇总
============================================ 1.客户端: SecureCRT 7.1 或者putty 2.FTP 主要是上传文件往Linux,否则我们就的 ...
- Iptables 防火墙开放常见的22,53,80端口
用iptables防火墙 iptables -F # 允许包从22端口进入 iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许从22端口进入的包返回 ...
- Tile-Based Deferred Rendering
目前所有的移动设备都使用的是 Tile-Based Deferred Rendering(TBDR) 的渲染架构.TBDR 的基本流程是这样的,当提交渲染命令的时候,GPU 不会立刻进行渲染,而是一帧 ...
- Docker学习总结之docker安装
Ubuntu安装指南 以下均翻译自Docker官方文档 ,转载请注明:Vikings翻译 Docker 支持多种平台下的安装运行,现在我们选取结合度最高的ubuntu来说明安装过程. 首先需要明确Do ...