在iOS中删除sqlite数据库中的记录;不要减少数据库大小

在iOS中删除sqlite数据库中的记录;不要减少数据库大小,ios,database,sqlite,memory,size,Ios,Database,Sqlite,Memory,Size,我目前正试图通过在iOS应用程序中删除sqlite数据库中的记录来减小数据库的大小,但大小将保持不变(与数据库关联的所有文件的大小,即.sqlite文件、.sqlite shm文件和.sqlite wal文件)。我已经读到这是预期的行为(参考:)。此链接建议使用sqlite“真空”工具,这将清理未使用的内存片段。但是,通过这样做,这会在回滚磁盘内存(更具体地说,是.sqlite wal文件)中分配大量内存。因此,这没有帮助,因为与数据库关联的文件的总大小没有减少 我想知道有没有人知道在这种情况下

我目前正试图通过在iOS应用程序中删除sqlite数据库中的记录来减小数据库的大小,但大小将保持不变(与数据库关联的所有文件的大小,即.sqlite文件、.sqlite shm文件和.sqlite wal文件)。我已经读到这是预期的行为(参考:)。此链接建议使用sqlite“真空”工具,这将清理未使用的内存片段。但是,通过这样做,这会在回滚磁盘内存(更具体地说,是.sqlite wal文件)中分配大量内存。因此,这没有帮助,因为与数据库关联的文件的总大小没有减少

我想知道有没有人知道在这种情况下该怎么办?感谢您的帮助

谢谢


JB

在初始化持久存储协调器(通常在appdelegate中)时,可以禁用预写日志记录(sqlite wal)(检查堆栈溢出或google)。这意味着对SQL db所做的任何更改都会立即反映在设备上的磁盘上,正如您所期望的那样

它可能看起来像这样:

 if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                                               configuration:nil
                                                         URL:storeURL
                                                     options:@{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES, NSSQLitePragmasOption : @{@"journal_mode" : @"DELETE"}}
                                                       error:&error])

您可以在初始化持久存储协调器(通常在appdelegate中)时禁用预写日志记录(sqlite wal)(检查堆栈溢出或google)。这意味着对SQL db所做的任何更改都会立即反映在设备上的磁盘上,正如您所期望的那样

它可能看起来像这样:

 if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                                               configuration:nil
                                                         URL:storeURL
                                                     options:@{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES, NSSQLitePragmasOption : @{@"journal_mode" : @"DELETE"}}
                                                       error:&error])

我没有使用持久性商店协调员。该应用程序使用的是FMDB库(基本上只是原生sqlite3库之上的包装器),该库使用的是写前日志支持,无法关闭。想法?应该有一个选项可以在配置、初始化或其他地方关闭该功能…FMDB不会公开这一点。它不允许客户端关闭日志AlingDoes sqlite允许关闭日志?我没有使用持久存储协调器。该应用程序使用的是FMDB库(基本上只是原生sqlite3库之上的包装器),该库使用的是写前日志支持,无法关闭。想法?应该有一个选项可以在配置、初始化或其他地方关闭该功能…FMDB不会公开这一点。它不允许客户端关闭日志AlingDoes sqlite允许关闭日志?我没有使用持久存储协调器。该应用程序使用的是FMDB库(基本上只是原生sqlite3库之上的包装器),该库使用的是写前日志支持,无法关闭。想法?应该有一个选项可以在配置、初始化或其他地方关闭该功能…FMDB不会公开这一点。它不允许客户端关闭日志记录sqlite允许关闭日志记录吗?