关于最近使用sqlite所想到的

1、多进程操作数据库被锁的解决方案

SQLite对于整个数据库文件进行读取/写入锁定。这意味着如果任何进程读取了数据库中的某一部分, 其他所有进程都不能再对该数据库的任何部分进行写入操作。同样的, 如果任何一个进程在对数据库进行写入操作, 其他所有进程都不能再读取该数据库的任何部分。 对于大多数情况这不算是什么问题。在这些情况下每个程序使用数据库的时间都很短暂, 并且不会独占, 这样锁定至多会存在十几毫秒。但考虑到项目应用会有多个进程同时操作数据库,所以为了防止因数据库被锁造成读写数据失败的情况,需做以下几点。

1、      所有对数据库读写操作都要设置等待超时时间,这是解决数据库被锁问题最好的解决方案。

2、      尽可能的减少每次对数据库操作的时间。

1、  对于插入数据操作,如果一次需插入10条以上的记录,需使用事务的方式。

2、  对于读取数据操作,需对关键字段建立索引以加快查询速度。如果请求数据量较多,需分步读取数据(每次读取不超过96条记录),以减少每次读取数据的时间以及存储数据的内存。

 

2、数据完整性

       SQLite保证任何对数据的修改都是原子的,既要么数据修改成功,要么数据恢复到末修改时的状态。其原理是对数据库进行修改时会对数据库上锁,此时其它进程只能查询数据而不能修改,且在修改数据库文件之前,SQLite会生成一个单独的回滚日志文件,并在其中写进将会被修改的页的原始数据。如果修改失败(可能是突然断电或系统崩溃造成的),数据库的恢复进程会在下次启动数据库时根据日志文件回滚,将数据库文件恢复到原始状态的数据。虽然SQLite原子提交机制已经被证明是健壮的,但还是需要考虑数据库文件被破坏的情况,最好的办法是通过数据库备份机制。因SQLite数据库实际是一个文件,只需使用cp 命令就能完成数据库的备份,所以数据库备份既简单又快。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值