美文网首页
fmdb学习

fmdb学习

作者: CAICAI0 | 来源:发表于2018-02-09 13:58 被阅读10次

FMDatabaseQueue 中使用事务与不使用事务性能对比,一下为简单的插入语句执行结果

//事务
[fqueue inTransaction:^(FMDatabase * _Nonnull db, BOOL * _Nonnull rollback) {
    NSLog(@"start");
    for (NSInteger i=0; i<1000; i++) {
        if ([db executeUpdate:@"INSERT INTO person VALUES (?, ?, ?)", @(i+5), @"Jemmy", @(i)]) {
            NSLog(@"Jemmy 插入成功 - %@", [NSThread currentThread]);
        }else{
            *rollback = true;
        }
    }
    NSLog(@"end");
}];
  //直接插入
[fqueue inDatabase:^(FMDatabase * _Nonnull db) {
    NSLog(@"start");
    for (NSInteger i=0; i<1000; i++) {
        if ([db executeUpdate:@"INSERT INTO person VALUES (?, ?, ?)", @(i+5), @"Jemmy", @(i)]) {
            NSLog(@"Jemmy 插入成功 - %@", [NSThread currentThread]);
        }
    }
    NSLog(@"end");
}];

结果

事务 100
2018-02-09 13:45:58.942268+0800 fmdb[81974:4828724] start
2018-02-09 13:45:59.012494+0800 fmdb[81974:4828724] end
    0.070226

事务 1000
2018-02-09 13:47:48.655100+0800 fmdb[82028:4839212] start
2018-02-09 13:47:49.513091+0800 fmdb[82028:4839212] end
    0.857991

非  100
2018-02-09 13:50:02.857010+0800 fmdb[82082:4851511] start
2018-02-09 13:50:07.000350+0800 fmdb[82082:4851511] end
    4.14334

非  1000
2018-02-09 13:51:37.937383+0800 fmdb[82165:4858006] start
2018-02-09 13:51:46.728275+0800 fmdb[82165:4858006] end
    8.790892

sqlite 数据库,普通操作也会自动生成事务。一秒内最多提交事务的数量大概是100个,一个事务里面一秒内插入语句执行数量大概是1000个。所以如果批量操作使用一个事务处理会提高性能。

NSLog(@"start");
for (NSInteger i=0; i<1000; i++) {
    [fqueue inDatabase:^(FMDatabase * _Nonnull db) {
        if ([db executeUpdate:@"INSERT INTO person VALUES (?, ?, ?)", @(i+5), @"Jemmy", @(i)]) {
            NSLog(@"Jemmy 插入成功 - %@", [NSThread currentThread]);
        }
    }];
}
NSLog(@"end");

结果

2018-02-09 15:16:11.224784+0800 fmdb[88948:5164203] start
2018-02-09 15:16:14.545109+0800 fmdb[88948:5164203] end
3.320325

for循环在线程队列外执行结果,比在队列内执行更省时间。

NSLog(@"start");
for (NSInteger i=0; i<1000; i++) {
    [fqueue inTransaction:^(FMDatabase * _Nonnull db, BOOL * _Nonnull rollback) {
        if ([db executeUpdate:@"INSERT INTO person VALUES (?, ?, ?)", @(i+5), @"Jemmy", @(i)]) {
            NSLog(@"Jemmy 插入成功 - %@", [NSThread currentThread]);
        }else{
            *rollback = true;
        }
    }];
}
NSLog(@"end");

结果

2018-02-09 15:29:03.855980+0800 fmdb[89098:5233353] start
2018-02-09 15:29:06.499058+0800 fmdb[89098:5233353] end
2.643078

一样简单插入语句在手动生成的事务里面执行,效率会比sqlite隐式生成事务效率稍高。

相关文章

  • FMDB 的使用

    FMDB 是对 sqlite 的封装,该文章通过使用 FMDB 对学生数据进行操作,学习记录 FMDB 的使用。1...

  • ios Sqlite 学习

    FMDB 学习ios的应该都用过FMDB ,那么FMDB是如何优化我们的数据库操作的勒,手动实践下sqlite 封...

  • ios Sqlite 学习

    # FMDB 学习ios的应该都用过FMDB ,那么FMDB是如何优化我们的数据库操作的勒,手动实践下sqlite...

  • iOS-FMDB

    前言: 今天,就让我们,重点学习一下FMDB。 FMDB学习 一、基本介绍 简介:-由于iOS中原生的 SQLit...

  • fmdb学习

    FMDatabaseQueue 中使用事务与不使用事务性能对比,一下为简单的插入语句执行结果 结果 sqlite ...

  • FMDB学习

    FMDB简介 FMDB是什么 FMDB是iOS平台的SQLite数据库框架,它用object-c封装了SQLite...

  • FMDB数据库 Undefined symbols for a

    学习FMDB数据库,引入FMDB之后报下面的错,是因为我没有导入libsqlite3.tbd Undefined ...

  • ios学习笔记之FMDB的基本使用

    一 前言 学习如何使用FMDB框架,最好的办法就是阅读官方文档,在github上搜索“FMDB”,找到该框架,可以...

  • iOS中的数据存储(FMDB)

    Tips:刚学习完markdown,来试试效果,妥妥的,哈哈。 FMDB 1.是什么 FMDB是用OC的方式封装了...

  • 【iOS开发】数据存储——SQLite3框架FMDB的使用

    【iOS开发】数据存储——SQLite3框架FMDB的使用 在学习FMDB框架之前,我们首先来大概了解下SQL(S...

网友评论

      本文标题:fmdb学习

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