在Core Data中存储UUID(用于全局多系统对象识别)的最佳方法是什么?考虑存储大小和索引功能。
理想情况下,它将存储为二进制数据(128位),但这样做有什么直接问题吗?以尺寸方式存储它会更有效,而不是作为NSString,但我只是想检查将其存储为二进制数据没有性能问题。它仍然可以正确索引为二进制数据吗?在可变宽度字段中存储有效的固定宽度二进制数据是否有任何缺点?
我对SQLite及其存储/索引机制并不太熟悉,所以想要寻求一些建议!
答案 0 :(得分:10)
从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
}
答案 1 :(得分:3)
您计划存储多少个?将它们存储为二进制数据可节省大约50% - 大约20个字节作为二进制数据而大约40个字节作为字符串。所以你说的是每千万UUID拯救一个整体20K,这并不是我无论如何都要担心它。但是,如果您确实希望将它们保存为二进制数据,则可以将它们存储为NSData对象。
答案 2 :(得分:0)
我将我的UUID存储为" Transformable"而且运作良好。
将此添加到您的@NSManaged var uuid: NSUUID!
子类:
uuid
,创建一个名为Transformable
的属性request.predicate = NSPredicate(format: "uuid == %@", withUuid)
查询效果也很好,我编写谓词来搜索它们:
$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();