【问题标题】:Core Data transactions from Public database are coming very slow来自公共数据库的核心数据事务非常缓慢
【发布时间】:2021-06-05 03:29:56
【问题描述】:

我正在开发一个使用 CloudKit 作为主数据库的应用程序。我有一个相对较小的数据库(大约 200 个条目,每个条目有 2-3 个关系),我提供预先填充为公共数据库(iOS 14 中的新功能)。

我注意到CK 镜像非常非常慢。我在几秒钟内获得了前 5-6 笔交易,我必须等待大约 2 分钟才能填充所有数据。

因为我不能显示部分结果(如果它的关系尚未获取,我不能让用户看到主要实体)这对我来说是个大问题。

有没有办法加快 CK 镜像过程? (让它更有效率)?

我怎样才能诊断出消耗这么多的东西? Apple 在上一次 WWDC 中建议使用这个公共数据库作为初始数据集,但如果初始应用加载需要 2 分钟,人们会感到沮丧:o

【问题讨论】:

    标签: ios swift core-data cloudkit


    【解决方案1】:

    这是一种预期的行为,例如,假设您有 500 个没有任何关系的条目,然后您想使用 CKQueryOperation 获取,当操作添加到公共容器时,它不会返回所有 500 个条目一次,它将返回至少 100,然后它将使用光标查询下一个 100,依此类推。

    编辑

    有没有办法加快 CK 镜像过程? (让它更 效率)?

    没有

    由于网络问题,这些操作可能会很慢,您应该考虑到这一点。

    【讨论】:

    • 我可以理解,但是减轻用户痛苦的理想方法是什么?我相信没有人会理解为什么应用程序会在 2 分钟内加载。我尝试使用“种子”sqlite 文件。它可以工作,但是当它加载到不同的设备上时,我得到 'NSCloudKitMirroringDelegateWillResetSyncNotificationName' 原因:'AccountChange'
    • 为了减轻痛苦哈哈,你可以使用 NSPersistentCloudKitContainer.eventChangedNotification 来显示加载指示器吗?仅限 iOS 14+ ..
    • 或者公共数据库不要使用 NSPersistentCloudKitContainer,使用 CloudKit 功能当然更快。
    • 嗯,是的,我已经实现了类似的东西,但问题是现在我的整个 UI 都充满了微调器。
    • 我不明白他们为什么要为公共数据库实施这个 CoreData+CK。它的明显用户有一些需要填充的初始数据集。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 2020-07-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    相关资源
    最近更新 更多