美文网首页iOS进阶之路
iOS数据库的使用(一):FMDB中的线程安全

iOS数据库的使用(一):FMDB中的线程安全

作者: 康小曹 | 来源:发表于2019-05-15 23:00 被阅读0次
FMDB基本概念

数据库是存放数据的仓库,存放的是多张的表,类似于Excel,数据以表格的形式展现。常见的数据库:有sqlite, MySQL, SQLServer, Oracle, Access等

FMDB使用的sqlite。sqlite具有灵活小巧,可移植性高的特点。而Mysql一般使用在大型的商业项目中。而libsqlite3是对sqlite数据库进行操作的系统库,也就是系统级别的api,而FMDB就是对libsqlite3中的api进行了封装实现了一些数据库常用的增删改查等功能

FMDB基本框架

FMDB主要功能为:

  • 数据库的创建
  • 更新语句
  • 查询语句
  • 数据库的开关(连接和断开)
  • 数据库的线程问题

FMDB基本框架及其思维导图如下:


FMDB思维导图
FMDB的线程处理逻辑

首先,SQLite是文件型数据库,其机制也和文件基本类似,也就是 写独占,读共享。FMDB本质上只是保证了使用sqlite时的线程安全而并没有实现读共享的功能(至于为什么,怎么实现?),其代码处理如下:

[self.queue inDatabase:^(FMDatabase * _Nonnull db) {
        // 这里是replae语句的相关方法
        [self addDataFrom:0 count:1000];
    }];

其本质是:

dispatch_sync(_queue, ^() {
        FMDatabase *db = [self database];
        block(db);
    });

而_queue是在初始化FMDatabaseQueue时生成的一个串行队列,其主要逻辑是:

_queue = dispatch_queue_create([[NSString stringWithFormat:@"fmdb.%@", self] UTF8String], NULL);

备注:
这里的串行队列不能使用主队列,因为使用朱队列会形成相互阻塞的问题。

综上所述:FMDB的线程处理就是强行就所有的多线程逻辑在一个串行队列中同步处理。

更多文章

相关文章

网友评论

    本文标题:iOS数据库的使用(一):FMDB中的线程安全

    本文链接:https://www.haomeiwen.com/subject/xwcvaqtx.html