将UUID存储在核心数据中

Mic*_*all 5 uuid core-data ios

在Core Data中存储UUID(用于全局多系统对象识别)的最佳方法是什么?考虑存储大小和索引功能.

理想情况下,它将存储为二进制数据(128位),但这样做有什么直接问题吗?以大小方式存储它会更有效,而不是作为NSString,但我只是想检查将其存储为二进制数据没有性能问题.它仍然可以正确索引为二进制数据吗?在可变宽度字段中存储有效的固定宽度二进制数据是否有任何缺点?

我对SQLite及其存储/索引机制并不太熟悉,所以想要寻求一些建议!

Jon*_*nny 10

从iOS 11开始,您可以直接在Core Data编辑器中设置UUID属性.UUID将自动存储为二进制.

在此输入图像描述

然后,您可以使用UUID(在Obj-C中NSUUID)获取Core Data对象.

static func fetch(with identifier: UUID) -> AudioRecord? {
    var record: AudioRecord?
    moc.performAndWait {
        let fetchRequest = AudioRecord.request
        fetchRequest.predicate = NSPredicate(format: "identifier == %@", identifier as CVarArg)
        fetchRequest.fetchLimit = 1
        record = (try? fetchRequest.execute())?.first
    }
    return record
}
Run Code Online (Sandbox Code Playgroud)

  • @matt 你可以在 `NSManagedObject.awakeFromInsert()` 中设置 `primitiveIdentifier = UUID()`,这样你的 Core Data 对象将始终具有默认标识符(非零)。 (2认同)

Cal*_*leb 6

您计划存储其中多少个?将它们存储为二进制数据可节省约 50%,即二进制数据大约 20 个字节,而字符串大约 40 个字节。所以你说的是每 1000 个 UUID 可以节省 20K,这还不足以让我担心。但是,如果您确实想将它们保存为二进制数据,可以通过将它们存储为 NSData 对象来实现。

  • 我通常将它们保存为 NSString。这使得查看和编写查询变得非常简单。我从来没有遇到过任何磁盘大小问题。 (2认同)