簡體   English   中英

將UUID存儲在核心數據中

[英]Storing UUIDs in Core Data

在Core Data中存儲UUID(用於全局多系統對象識別)的最佳方法是什么? 考慮存儲大小和索引功能。

理想情況下,它將存儲為二進制數據(128位),但這樣做有什么直接問題嗎? 以尺寸方式存儲它會更有效,而不是作為NSString,但我只是想檢查將其存儲為二進制數據沒有性能問題。 它仍然可以正確索引為二進制數據嗎? 在可變寬度字段中存儲有效的固定寬度二進制數據是否有任何缺點?

我對SQLite及其存儲/索引機制並不太熟悉,所以想要尋求一些建議!

從iOS 11開始,您可以直接在Core Data編輯器中設置UUID屬性。 UUID將自動存儲為二進制。

在此輸入圖像描述

然后,您可以使用UUID (在Obj-C, NSUUID )獲取核心數據對象。

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
}

您計划存儲多少這些? 將它們存儲為二進制數據可節省大約50% - 大約20個字節作為二進制數據而大約40個字節作為字符串。 所以你說的是每千萬UUID拯救一個整體20K,這並不是我無論如何都要擔心它。 但是,如果您確實希望將它們保存為二進制數據,則可以將它們存儲為NSData對象。

我將我的UUID存儲為“可轉換”並且運行良好。

  1. 將它添加到NSManagedObject子類: @NSManaged var uuid: NSUUID!

  2. 在核心數據模型(.xcdatamodel文件)中,使用Type Transformable創建名稱為uuid的屬性

查詢工作也很好,我編寫我的謂詞來搜索它們,如下所示:

request.predicate = NSPredicate(format: "uuid == %@", withUuid)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM