- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在为一个应用程序构建 CoreData 迁移,每个实体平均有 20 万/50 万行数据。 CoreData 模型中目前有 15 个实体。
这是我为此应用程序构建的第 7 次迁移,之前的所有迁移都是简单的(添加 1 或 2 列样式)迁移,没有任何问题,也不需要任何映射模型。
这次迁移
与之前的迁移相比,我们正在进行的迁移规模相当大,并在两个现有实体之间添加了一个新实体。这需要我们构建的自定义 NSEntityMigrationPolicy 来映射新的实体关系。我们还有一个 *.xcmappingmodel,它定义了模型 6 和新模型 7 之间的映射。
我们已经实现了自己的 NSMigrationManager 子类(根据 http://www.objc.io/issue-4/core-data-migration.html + http://www.amazon.com/Core-Data-Management-Pragmatic-Programmers/dp/1937785084/ref=dp_ob_image_bk )。
问题
Apple 使用 NSMigrationManager 的 migrateStoreFromURL 方法来迁移模型,但是,这似乎是为低/中数据集大小构建的,不会使内存过载。
我们发现应用程序因内存过载(在 iPad Air/iPad 2 上为 500-600mb)而崩溃,这是由于以下苹果方法不经常在数据传输时转储内存。
[manager migrateStoreFromURL:sourceStoreURL type:type options:nil withMappingModel:mappingModel toDestinationURL:destinationStoreURL destinationType:type destinationOptions:nil error:error];
Apple 建议的解决方案
Apple 建议我们应该将 *.xcmappingmodel 分成一系列每个实体的映射模型 - https://developer.apple.com/library/ios/documentation/cocoa/conceptual/CoreDataVersioning/Articles/vmCustomizing.html#//apple_ref/doc/uid/TP40004399-CH8-SW2 .这将与上述 NSMigrationManager 子类中定义的 progressivelyMigrateURL 方法一起工作。但是,我们无法使用此方法,因为单独的实体仍会由于一个实体本身的大小而导致内存过载。
我的猜测是我们需要编写自己的 migrateStoreFromURL 方法,但希望尽可能接近 Apple 的预期。以前有没有人这样做过和/或对我们如何实现这一点有任何想法?
最佳答案
简短的回答是,大量迁移对 iOS 不利,应该不惜一切代价避免。它们从未设计用于内存受限的设备。
话虽如此,在我们讨论解决方案之前,请问您几个问题:
数据是否可恢复?能重新下载吗还是这个是用户数据?
您能否在没有旧关系的情况下解决实体之间的关系?能否重构?
我有一些解决方案,但它们依赖于数据,因此问题会返回给您。
The data is not recoverable and cannot be re-downloaded. The data is formed from user activity within the application over a time period (reaching up to 1 year in the past). The relationships are also not reconstructable, unless we store them before we lose access to the old relationships.
好的,您所描述的是最坏的情况,因此也是最困难的情况。幸运的是,它并非无法解决。
首先,大量迁移是行不通的。我们必须编写代码来解决这个问题。
我的首选解决方案是进行轻量级迁移,仅添加(现在)三个实体之间的新关系,而不会删除旧关系。这种轻量级迁移将在 SQLite 中进行,并且速度非常快。
迁移完成后,我们将遍历对象并根据旧关系设置新关系。这可以作为后台进程完成,也可以在使用对象时一次性完成,等等。这是一个业务决策。
转换完成后,如果需要,您可以进行另一次迁移以删除旧关系。此步骤不是必需的,但它确实有助于保持模型清洁。
另一个有值(value)的选项是导出并重新导入数据。这具有设置代码以在其他平台上可读的格式备份用户数据的附加值。将数据导出到 JSON,然后设置一个导入例程,将数据连同新关系一起拉入新模型非常简单。
第二个选项的优点是更简洁,但需要更多代码以及用户事件中的“暂停”。第一个选项可以在用户甚至不知道正在发生迁移的情况下完成。
关于ios - 核心数据内存高效迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26182152/
我最近开始从事一个 Sails 项目。它目前在迁移表下具有以下格式的迁移。 20160826122004-create_users_table.js 'use strict'; module.expo
当我尝试迁移时 doctrine:migrations:migrate ,我收到此异常:“元数据存储不是最新的,请运行 sync-metadata-storage 命令来解决此问题。”。这仅在尝试在生
我在 ec2 linux 7 上有一个 MarkLogic 服务器。我想将它迁移到 linux 6。我将 ebs 移动到新的 linux 6 并将其安装在 /var/opt/MarkLogic . 我
我对 OpenID 很好奇。虽然我同意统一凭证的想法很棒,但我有一些保留意见。什么是防止 OpenID 提供商发疯并持有他们拥有的 OpenID 帐户直到您支付 n 美元?如果我决定不喜欢这个提供商,
使用 SQL 很容易做到这一点,但我需要编写一个我不熟悉的 Knex 迁移脚本。以下代码在 order 表中行的末尾添加了 order_id 列。我想在 id 之后添加 order_id。我该怎么做?
使用 SQL 很容易做到这一点,但我需要编写一个我不熟悉的 Knex 迁移脚本。以下代码在 order 表中行的末尾添加了 order_id 列。我想在 id 之后添加 order_id。我该怎么做?
我想通过在 Yii2 中的迁移添加一个新列,使用以下代码: public function up() { $this->addColumn('news', 'priority', $this-
我正在尝试在 SQLDelight 的表中添加更多列。我做了一个迁移文件 1.sqm .在迁移文件中,它给出了找不到表的错误。 我的 build.gradle.kts: sqldelight {
我有一个与 Flyway DB 迁移相关的问题。通常如何管理处理相同 DB 模式的多个项目(微服务)。每个项目中的 Flyway 迁移脚本如果被其他项目修改,则不允许启动。他们是否有任何文档或最佳实践
我是 Laravel 的新手。我做了一份待办事项申请作为一项学校作业。我们必须使用迁移来创建我们的数据库。 我使用迁移创建了 2 个表。我的问题是:如果你第一次在你的电脑上运行这个项目,有没有办法自动
我正在尝试在 Laravel 中创建外键,但是当我使用 artisan 迁移表时,出现以下错误: [Illuminate\Database\QueryException] SQLSTATE[HY000
我从 Django 1.7 升级到 Django 1.9。我有多次迁移。升级后我无法再创建新的数据库。 问题是“django manage.py migrate”运行检查。检查导入应用程序 URL。这
我在创建数据迁移方面遇到了困难。我的应用程序使用两个数据库。我在 settings.py 中配置了数据库,并创建了一个像 Django docs 中一样的路由器. # settings.py DB_H
我有一个像这样的sql结构: CREATE TABLE resources ( id SERIAL PRIMARY KEY, title TEXT NOT NULL, created_at
我正在尝试使用模式构建器向表添加枚举选项(不丢失当前数据集)。 我真正能够找到的关于列更改的唯一信息是 http://www.flipflops.org/2013/05/25/modify-an-ex
我尝试转移到一些 CMake 程序中,并且有一个从 xml 生成头文件的函数。 生成文件.am adaptor_glue.hpp: dbus_introspect.xml $(DBUSXX_X
我想将文件移至我的 iOS 应用程序的 CoreData 存储 ../Library/Application Support/MyApp/ 至 ../Documents/Stores/ 我可以使用 N
有没有人对数据迁移进出 NetSuite 有丰富的经验?我必须将 DB2 表导出到 MySQL,处理数据,然后导出到一个 CSV 文件中。然后获取帐户的 CSV 文件并再次操作数据以使帐户从我们的旧系
我正在尝试在 Django 上建立一个博客。我已经走到了创建模型的地步。他们在这里: from django.db import models import uuid class Users(mode
我最近使用 bluehost 上的 AutoSSL 工具将网站迁移到 HTTPS。我在内容中看到一些失真,例如缺少背景颜色、表格位移、缺少_logos 等。 有谁知道 HTTPS 迁移效果如何影响样式
我是一名优秀的程序员,十分优秀!