将UUID存储在核心数据中

时间:2011-03-22 14:07:35

标签: ios core-data uuid

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

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

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

3 个答案:

答案 0 :(得分:10)

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

enter image description here

然后,您可以使用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
}

答案 1 :(得分:3)

您计划存储多少个?将它们存储为二进制数据可节省大约50% - 大约20个字节作为二进制数据而大约40个字节作为字符串。所以你说的是每千万UUID拯救一个整体20K,这并不是我无论如何都要担心它。但是,如果您确实希望将它们保存为二进制数据,则可以将它们存储为NSData对象。

答案 2 :(得分:0)

我将我的UUID存储为" Transformable"而且运作良好。

  1. 将此添加到您的@NSManaged var uuid: NSUUID!子类: uuid

  2. 在您的核心数据模型(.xcdatamodel文件)中
  3. ,创建一个名为Transformable的属性request.predicate = NSPredicate(format: "uuid == %@", withUuid)

  4. 查询效果也很好,我编写谓词来搜索它们:

    $username = mysqli_real_escape_string($mysqli, $username); $password = encryptpassword(mysqli_real_escape_string($mysqli, $password)); $firstname = mysqli_real_escape_string($mysqli, $firstname); $lastname = mysqli_real_escape_string($mysqli, $lastname); $email = mysqli_real_escape_string($mysqli, $email); $phone = mysqli_real_escape_string($mysqli, $phone); $mysqli = new mysqli("xxx", "xxx", "xxx", "xx"); if($mysqli->connect_errno > 0){ die('Unable to connect to the database'); } $stmt = $mysqli->prepare("INSERT INTO accounts (username, password, firstname, lastname, email, phone, active, hostingplan, domain, domain2) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); $stmt->bind_param("ssssssssss", $username, $password, $firstname, $lastname, $email, $phone, $active, $hosting_plan, $domain, $domain2); $stmt->execute(); $stmt = $mysqli->prepare("SELECT username, email_confirm_code FROM accounts_confirm WHERE email_confirm_code = ?"); $stmt->bind_param("s", $email_confirm_code); $stmt->execute(); $stmt->bind_result($username, $confirmcode); $stmt->fetch(); $stmt->reset(); $stmt->close();