如何VACUUM核心数据SQLite数据库?

时间:2009-10-07 14:57:13

标签: sqlite core-data vacuum

根据设计,Core Data不会向其SQLite数据库发出 VACUUM SQL命令,如detailed here。我正在创建一个Core Data应用程序,它将在SQLite数据库中存储并稍后删除大型二进制文件(大小为2-10MB)。随着时间的推移,这将导致碎片化和大于必要的SQLite数据库。我想在我运行的清理操作期间定期发出VACUUM命令。

  • 如何逐步向Core Data的SQLite商店发出VACUUM命令?
  • 是否可以通过Core Data执行此操作,还是必须安装SQLite数据库并直接连接到它以执行VACUUM SQL?

3 个答案:

答案 0 :(得分:12)

在OS X 10.6 / iOS 3.0及更高版本上,支持的方法是在将商店添加到持久性存储协调器时在选项中设置NSSQLiteManualVacuumOption

答案 1 :(得分:2)

是的,vacuum是SQLite中公认的SQL语句。它可以用作普通查询or so it says

请注意,因为它可能导致过多的文件系统读取和写入 - 几乎任何系统的瓶颈 - 更不用说Windows服务器上的服务器文件系统碎片。

答案 2 :(得分:0)

以下是您vacuum CoreData 容器

的方法

示例:

let container = NSPersistentContainer(name: "someName")

// Enable history tracking and remote notifications
guard let description = container.persistentStoreDescriptions.first else {
    fatalError("###\(#function): Failed to retrieve a persistent store description.")
}

description.setOption(true as NSNumber, forKey: NSSQLiteManualVacuumOption)

//... The rest of your setup

这样做, CoreData 容器将执行vacuum命令,并据此调整自身大小。