@beduin01

Обязательно ли производить добавление данных через транзакцию?

Прочитал документацию по IndexDB, но так и не понял. Обязательно ли производить добавление данных внутри транзакции? Вроде бы есть событие onupgradeneeded. Или оно касается только первичного заполнения БД с учетом версий?

Вроде бы вот такой код тоже работает:
var my_data = [
{"id": 186, "code": "05.10.13", "full_name": "Добыча угля", "short_name": "Добыча угля"}, 
{"id": 187, "code": "05.10.14", "full_name": "Добыча антрацита", "short_name": "Добыча антрацита"},
{"id": 188, "code": "02.10.15", "full_name": "Перевозки грузовые", "short_name": "Перевозки"}	
]

var db;
var request = window.indexedDB.open("MyTestDatabase", 3);

request.onsuccess = function(event) {
  db = event.target.result;
  var objectStore = db.createObjectStore("okveds", { keyPath: "ssn" });

};

request.onupgradeneeded = function(event) { 
	var db = event.target.result;
	for (d of my_data)
	{
		objectStore.add(d)
	}
}
  • Вопрос задан
  • 47 просмотров
Решения вопроса 1
Stalker_RED
@Stalker_RED
Если вы вносите что-то одним запросом - не обязательно.

Смысл транзакции - обработать какую-то цепочку дествий, которые нельзя разрывать.
Например, у пользователя есть корзина с заказами, и он пытается ее оплатить.
Нужно
1. списать деньги со счета юзера
2. очистить корзину
3. уменьшить кол-во доступного в магазине товара
4. отправить уведомление службе доставки, мол отвезите вон туда три телевизора и чайник, например.

И вот вы это все делаете БЕЗ транзакции, и на втором пункте молния ударила в серверную, и сгорел блок питания.

Вам все починили, но юзер жалуется: деньги списаны, а товара нет!

А если перед пунктом 1 начать транзакцию, то при возникновении ошибки или сбоя на любом из этапов, откатится вся транзакция.
Деньги вернутся на счет, корзина снова будет наполнена, вот это все.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Искра Екатеринбург
от 80 000 до 100 000 ₽
Art gorka Санкт-Петербург
от 60 000 ₽
от 40 000 до 60 000 ₽