Я экспериментировал с ионным родным SQLite.Чтобы повысить производительность, я хочу выполнить все запросы операции внутри транзакции.В документации есть пример использования транзакции DRAFT, но функция должна быть синхронной.Я обнаружил, что могу также запустить dbInstance.executeSQL ('BEGIN'), а затем 'COMMIT', чтобы поместить операторы в одну и ту же транзакцию, и все операторы в середине могут выполняться асинхронно с использованием async / await или обещаний.
У меня такой вопрос, является ли производительность при втором подходе такой же?
Я пытался использовать транзакцию DRAFT, но она допускает только синхронный код и ограничен.
Я пытался запустить BEGIN, затемвставлять / обновлять запросы (асинхронно) и затем завершать оператор COMMIT (после разрешения обещаний).
При первом подходе с использованием транзакции DRAFT разрешается только синхронный код внутри функции, когда функция завершает транзакцию.
dbInstance.transaction(tx => {
tx.executeSql('update ...', [...]);
});
Второй подход позволяет асинхронно добавлять операторы в транзакцию.
await this.dbManager.executeSql('BEGIN', []);
await this.dbManager.executeSql(`update Log set description = 'AFTER TIMEOUT'`, []);
await new Promise((resolve, reject) => setTimeout(resolve, 10000));
await this.dbManager.executeSql('ROLLBACK', []);//description is AFTER TIMEOUT for 10 seconds before get rolled back.
Я думаю, что производительность должна быть одинаковой для обоих.Однако я не уверен, есть ли какие-либо подводные камни со вторым подходом, поскольку это не упомянуто в документации cordova-sqlite-storage.