HTML5 Web SQL DB - максимальный размер таблицы? - PullRequest
3 голосов
/ 28 октября 2010

Я в процессе создания довольно сложного веб-приложения 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 не завершит работу.сделка.

У кого-нибудь есть идеи относительно того, что может быть причиной этого?

Надеюсь, я объяснил проблему достаточно подробно.Пожалуйста, не стесняйтесь задавать любые вопросы, если я был слишком расплывчат.

Спасибо за вашу помощь.

Обновление: я попытался добавить некоторую обработку ошибок, и ответ "ограничение не выполнено".Я провел небольшое исследование того, что может быть причиной этого, но я все еще пытаюсь найти ответ.

Ответы [ 2 ]

11 голосов
/ 10 декабря 2010

Вы можете создать простое расширение Chrome, которое снимает ограничение размера локальной базы данных.

5 голосов
/ 05 декабря 2010

Я думаю, что вы попали в жестко запрограммированный лимит размера базы данных WebSQL 5 МБ в Chrome. Я могу проверить, что ваш код не работает, как вы описываете, так же, как размер базы данных переваливает через 5120K (последняя версия) Chrome v8.0.552.215

Сообщение об ошибке указывает на превышение разрешенной памяти и т. Д. Насколько я знаю, Chrome не использует параметры размера базы данных WebSQL.

Подробнее об этом по группе хрома

Ошибка ограничения может быть отдельной проблемой, так как вы можете вызвать такую ​​ошибку, попытавшись вставить дублирующую запись. Это может быть вызвано простым запуском кода вставки более одного раза, без изменения инициализации итерации и параметров границ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...