Я пытаюсь выполнить массивную вставку данных в Realm, но это делает ее очень медленной.Как вставить много записей в Realm с Swift?
Это мой код:
let realm = try! Realm()
let group = GroupRealm()
group.id = 1
group.name = "test"
try! realm.write {
realm.add(group)
}
var product = [String:AnyObject]()
product["id"] = "" as AnyObject!
product["code"] = ("") as AnyObject!
product["detail"] = ("") as AnyObject!
product["onHand"] = (0) as AnyObject!
product["price"] = (0) as AnyObject!
product["isSerialized"] = (0) as AnyObject!
product["isLotNumber"] = (0) as AnyObject!
var groupProduct = [String:AnyObject]()
groupProduct["group"] = group as AnyObject!
for r in 0..<300 {
realm.beginWrite()
for i in 0..<100 {
product["id"] = "\(i)-\(r)" as AnyObject!
realm.create(ProductRealm.self, value: product, update: true)
groupProduct["id"] = "\(i)-\(r)" as AnyObject!
groupProduct["product"] = product as AnyObject!
realm.create(GroupProductRealm.self, value: groupProduct, update: true)
}
try! realm.commitWrite()
}
Объекты:
class ProductRealm: Object {
public dynamic var id: String = ""
public dynamic var code: String = ""
public dynamic var detail: String = ""
public dynamic var onHand: Int = 0
public dynamic var price: Double = 0
public dynamic var isSerialized: Int = 0
public dynamic var isLotNumber: Int = 0
override static func primaryKey() -> String? {
return "id"
}
}
class GroupProductRealm: Object {
public dynamic var id = ""
public dynamic var group: GroupRealm!
public dynamic var product: ProductRealm!
override static func primaryKey() -> String? {
return "id"
}
}
class GroupRealm: Object {
public dynamic var id = 1
public dynamic var name = ""
public dynamic var update = Date()
override static func primaryKey() -> String? {
return "id"
}
}
Испытания на моем iPhone 5s для вставки 30000 записей задерживается более чем на 30 секунд, в то время как в старом проекте у меня есть с sqlite требуется около 16 секунд.
Я прочитал, что сфера гораздо быстрее, чем в этом SQLite, так что я знаю, что это ошибка моя, но я не даю с D:
Извините за мой английский.
Почему вы делаете на операции записи в отдельных 300 операций записи, а не в одной транзакции записи? – bdash
У меня есть код для отображения счетчика каждый раз, когда вы вставляете 100 записей, и проверяете время с и без этой части кода, и оно не сильно влияет на –
Испытание с 30000 в одной транзакции. Время: 25 секунд –