ios核心数据如何实现sql事务功能?

Posted

技术标签:

【中文标题】ios核心数据如何实现sql事务功能?【英文标题】:ios core data how to implement the sql transaction function? 【发布时间】:2012-03-16 07:05:07 【问题描述】:

喜欢标题。我使用核心数据插入项目,我插入 100 个项目,它太慢了。如何提高插入速度? Core Data 哪个有事务功能?

【问题讨论】:

你能告诉我们你是如何创建你的项目的吗? 【参考方案1】:
[[<#NSManagedObjectContext#> undoManager] beginUndoGrouping];
... do some data modifications ....
[[<#NSManagedObjectContext#> undoManager] endUndoGrouping];

[[<#NSManagedObjectContext#> undoManager] undo]; // rollback
...

【讨论】:

【参考方案2】:

您正在寻找的是在插入所有 100 个对象之后而不是在每次插入之后在 Core Data 中 save

当对象被插入到 Core Data 中时,它们只存在于内存中。要将新对象持久保存到磁盘,您应该保存它将进行所有更改(插入、更新和删除)并将它们一起写入磁盘。


如果您查看the documentation for -insertObject(如下),您会了解到插入对象只会在保存更改时注册要插入的对象。

插入对象:

注册一个对象,以便在下次保存更改时插入到接收者的持久存储中。

- (void)insertObject:(NSManagedObject *)object

参数

对象

一个托管对象。

通过进一步查看the documentation for -save:(如下),您会发现它将(尝试)保存所有未保存的更改,在您的情况下是所有 100 个插入的项目。

保存:

尝试将对已注册对象的未保存更改提交到其持久存储区。

- (BOOL)save:(NSError **)error

参数

错误

指向NSError 对象的指针。您不需要创建 NSError 对象。如果您通过NULL,则保存操作在第一次失败后中止。

返回值

如果保存成功则YES,否则NO

【讨论】:

这也很慢,因为交易的速度增加丢失了。无论如何要修改它?

以上是关于ios核心数据如何实现sql事务功能?的主要内容,如果未能解决你的问题,请参考以下文章

数据库原理 - 序列3 - 事务是如何实现的? - Redo Log解析

PDO类基本应用二

SQL优化 MVCC PostgreSQL实现事务和多版本并发控制的精华

(十三)如何实现事务

(十三)如何实现事务

如何清理SQL Server中的事务日志