Я пытаюсь вставить около 10000 данных в свою базу данных. Проверьте ниже функцию для кода. Вставка всех данных занимает около минуты. Теперь я уже добавил блок в транзакцию, но мне нужно его зафиксировать или он управляется автоматически. Как я могу написать это в коде ниже?
func insertDataToDB(objects: [DataModel]) {
removeAllData()
createSchemaForData()
print("Start Inserting Connectors \(Date())")
let stmt = try? db.prepare("INSERT INTO product (connectorId, deviceId, current, status, cost, voltage, power, type, method, mode) VALUES (?,?,?,?,?,?,?,?,?,?)")
do {
try db.transaction {
for product in objects {
try stmt?.run(product.connectorId!, product.deviceId!, product.current, product.status, product.cost, product.voltage, product.power, product.type!, product.method!, product.mode)
}
}
} catch {
print("Failed Inserting connectors: \(error.localizedDescription)")
}
print("End Inserting Connectors \(Date())")
}
removeAllData()
Удаляет все данные из БД перед вставкой.
createSchemaForData()
При необходимости создаст схему.
struct product {
static let table = Table("product")
static let connectorId = Expression<String>("connectorId")
static let deviceId = Expression<String>("deviceId")
static let current = Expression<Double?>("current")
static let status = Expression<String?>("status")
static let cost = Expression<Double?>("cost")
static let voltage = Expression<Double?>("voltage")
static let power = Expression<Double?>("power")
static let type = Expression<String?>("type")
static let method = Expression<String?>("method")
static let mode = Expression<String?>("mode")
}
begin transaction
до начала вставки данных и после завершения вставки данных использоватьcommit transaction
. Ссылка: stackoverflow.com/questions/14631477/ - person Kuldeep   schedule 23.04.2018db.transaction
, который, предположительно, выполняет транзакции за него. Я думаю, что нам нужно немного почистить эту луковицу, чтобы понять, почему она не выполняет транзакцию так, как мы думаем, если это действительно проблема. Тут может быть что-то еще... - person Rob   schedule 23.04.2018BEGIN
иCOMMIT
. - person TheTiger   schedule 23.04.2018db.transaction
выполняет необходимые действияBEGIN TRANSACTION
/COMMIT
(вставка 100 000 записей заняла 0,5 секунды сdb.transaction
и 123 секунды без), поэтому я не думаю, что рутинное наблюдение за транзакциями здесь уместно. Происходит что-то еще. Но я не могу воспроизвести проблему на основе кода в вашем вопросе, поэтому вы должны предоставить нам MCVE. - person Rob   schedule 23.04.2018BEGIN
иCOMMIT
. - person TheTiger   schedule 23.04.2018