【问题标题】:Preferred method to mass update in Realm?在 Realm 中大规模更新的首选方法?
【发布时间】:2015-07-24 17:51:24
【问题描述】:

我的 Realm 数据库中有 10,000 Person Objects,我只有每个人的 ID。我一直在分析我想出的不同解决方案来更新每个 Person 对象上的所有名称。

在我的测试应用程序中,我使用以下方法检索所有 ID。

下面的代码仅用于获取测试的 ID,在实际应用中我已经有了 ID

var ids = [String]()
for person in realm.objects(Person) {
    ids.append(person.id)
}

更新 10,000 个 Person 对象的所有名称的第一种方法

realm.write {
    let people = realm.objects(Person).filter("id IN %@", ids)
    for person in people {
        person.name = "lionpants"
    }
}

为 10,000 个 Person 对象更新所有名称的第二种方法

realm.write {
    for id in ids {
        let person = realm.objectForPrimaryKey(Person.self, key: id)
        person?.name = "lionpants"
    }
}

令人惊讶的是,这两种方法使用 Xcode Time Profiler 的平均运行时间约为 1200ms(包括获取 ID)(我认为使用谓词的第一种方法会更快)。

就个人而言,由于缺少谓词,我更喜欢第二种方法。但是,当使用 Realm 进行大规模更新时,是否有首选/不同的方法?也许我缺少一些内置函数?

【问题讨论】:

    标签: ios swift realm


    【解决方案1】:
    realm.write {
        let people = realm.objects(Person).filter("id IN %@", ids)
        people.setValue("lionpants", forKey: "name")
    }
    

    应该稍微快一点,而且通常在这样的结果上使用 KVC 会更高效,因为 Realm 可以在后台采取一些捷径。

    【讨论】:

    • 在我的测试项目中应用这个解决方案会产生大约 600 毫秒的运行时间,肯定更快。我想我现在会坚持使用“第二种方法”,但由于编译器的安全性等原因。我不喜欢魔术字符串。如果需要性能,您的解决方案肯定很方便,谢谢!
    • 是否可以将它分享给任何人用于 Objective-C?
    猜你喜欢
    • 2013-06-04
    • 2011-07-06
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多