Я в процессе создания довольно сложного веб-приложения HTML5, которое извлекает свои данные из веб-службы для заполнения базы данных Web SQL.
Все шло хорошо с тестовыми данными, затем я попыталсяиспользуя некоторые реальные данные (таблицу с 10 столбцами и более 180 000 строк) и столкнулся с некоторыми проблемами.
Я отправляю ответы SQL в виде «кусочков» по 500 вставок, а затем запускаю транзакцию и получаю следующуюответ от веб-службы.Это работает нормально, пока таблица не достигнет примерно 9000 строк, а затем больше не будет.На данный момент размер файла базы данных по-прежнему составляет менее 2 МБ, и я установил максимальный размер 20 МБ, поэтому я не думаю, что это проблема.
Мне удалось воссоздать аналогичную проблему с более простым кодом,чтобы другие могли видеть, о чем я говорю.(По какой-то причине я не могу заставить все это остаться в «блоке кода» (извините))
//var qsParm = new Array();
var bigData = {};
bigData.webdb = {};
var readOnly = false;
bigData.webdb.open = function() {
bigData.webdb.db = null;
var dbSize = 20 * 1024 * 1024; // 20MB
infinity.webdb.db = openDatabase('bigData', '', 'bigData DATA', dbSize);
};
bigData.webdb.onError = function(tx, e) {
alert('Something unexpected happened: ' + e.message);
};
bigData.webdb.createTable = function() {
var db = bigData.webdb.db;
db.transaction(function(tx) {
tx.executeSql("CREATE TABLE IF NOT EXISTS [MattTest] ([Foo] VARCHAR(32) PRIMARY KEY ASC, [Bar] VARCHAR(20), [Will] VARCHAR(100), [Smith] VARCHAR(100))", []);
});
db.transaction(function(tx) {
var i=0;
for(i=0; i<19000; i++)
tx.executeSql("INSERT INTO [MattTest] (Foo, Bar, Will, Smith) VALUES (?,?,?,?)", ['Foo' + i, 'Bar', 'Now this is the story all about how My life got flipped turned upside down', 'And Id like to take a minute just sit right there Ill tell you how I became the prince of a town called Bel Air']);
}
});
};
Пожалуйста, игнорируйте строковое значение, это просто что-то, чтобы дополнить размер varchar (SQLite неПохоже, что он не дополняет тип char).
На итерациях «19000» выше (или любом числе ниже) таблица будет создана в Chrome, и все данные будут введены правильно.База данных будет около 4 МБ.Safari позволит мне добавить больше строк, и у меня в Safari размер БД составляет около 10 МБ.
Если я попытаюсь удалить содержимое таблицы и увеличить количество итераций до 20 000, Chrome не завершит работу.сделка.
У кого-нибудь есть идеи относительно того, что может быть причиной этого?
Надеюсь, я объяснил проблему достаточно подробно.Пожалуйста, не стесняйтесь задавать любые вопросы, если я был слишком расплывчат.
Спасибо за вашу помощь.
Обновление: я попытался добавить некоторую обработку ошибок, и ответ "ограничение не выполнено".Я провел небольшое исследование того, что может быть причиной этого, но я все еще пытаюсь найти ответ.