这将是使用核心数据(iOS)更新用户只读数据库的最佳方式



我正在根据我们政府的开放数据构建一个iOS应用程序,

我使用 CoreData 来存储数据,我的 xcdatamodel 中大约有 8 个实体,

某个实体包含 20000+ 行数据,而这个数据库是只读的,

我不会,用户也不会修改数据库,例如删除/更新/创建,这是一个只读数据库。

来自政府的开放数据将不断更新,但它没有计划(也不经常(,如果开放数据已更新,我需要让用户更新数据库。

我正在考虑哪一个是更新用户数据库的最佳方法?

1(从我的服务器获取JSON,从数据库中删除所有内容,然后再次插入。

缺点:a(风险很高,用户/系统可能会在更新时终止应用程序。b( 大量的网络流量成本

2(清除数据库,在iOS模拟器上从我的服务器获取所有实体数据,插入数据,

之后,从文档文件夹中复制数据库,将其放在服务器上,让我的用户下载整个sqlite数据库,并覆盖旧数据库。

我认为第二个会更好,但我不知道这会冒任何风险吗?还是这种方法有缺点?

谢谢!

如果数据库太重,并且是只读的,那么我建议您升级数据库并将其作为应用程序的新版本启动,因此当用户从应用商店更新应用程序时,将删除以前的数据库并安装新的数据库,我宁愿不冒险进行后台数据获取, 这可能会导致网络丢失/应用程序终止错误,并且更新将卡在中间,最好是安全的,并使用更新的数据库发布新版本

有几种方法可以实现此目的。

可能最快和最可靠的解决方案是在后台任务中从服务器下载最新的 SQLite 数据库文件(请参阅NSURLSession(。您可以通过复制到适当的位置轻松地在设备上"安装"数据库文件。

这将要求你在应用之外的某个位置创建此数据库 - 也就是说,你需要控制 Web 服务。这是更棘手的部分。但是您需要知道SQLite数据库可以跨平台共享。因此,可以在其结构(由数据库架构定义(与设备上的结构匹配的服务器上创建 SQLite 数据库。在任何情况下,您都需要确切地知道如何在服务器上创建可以在设备上使用的SQLite数据库。因此,设备需要将所有必需的信息(例如数据库模式的"版本"(发送到服务器,以便服务器可以创建适当的数据库。

最新更新