Je suis à mi-chemin de la construction d'une application Web HTML5 assez complexe, qui récupère ses données à partir d'un service Web pour remplir la base de données Web SQL. Tout allait bien avec les données de test, puis j'ai essayé d'utiliser des données réelles (une table avec environ 10 cols et plus de 180 000 lignes) et rencontré quelques problèmes.HTML5 Web SQL DB - Taille maximale de la table?
J'envoie les réponses SQL en «morceaux» de 500 insertions, puis en exécutant une transaction et en saisissant la réponse suivante du service Web. Cela fonctionne très bien, jusqu'à ce que la table atteigne environ 9 000 lignes et que ça n'en prenne plus. À ce stade, la taille du fichier de base de données est toujours inférieure à 2 Mo et j'ai la taille maximale de 20 Mo, donc je ne pense pas que ce soit le problème.
J'ai réussi à recréer un problème similaire avec un code plus simple, afin que les autres puissent voir de quoi je parle. (Pour une raison quelconque, je ne peux pas tout pour rester dans le « bloc de code » (désolé))
//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']);
}
});
};
S'il vous plaît ignorer la valeur de chaîne, son juste petit quelque chose à la taille varchar (SQLite ne semblent remplir un type de caractère).
Lors des itérations "19000" ci-dessus (ou n'importe quel nombre ci-dessous), la table sera créée dans Chrome, avec toutes les données saisies correctement. La base de données sera d'environ 4MB. Safari va me laisser ajouter plus de lignes et j'ai eu la taille de la base de données jusqu'à environ 10 Mo dans Safari.
Si j'essaie de supprimer le contenu de la table et d'augmenter le nombre d'itérations à 20 000, Chrome ne termine pas la transaction.
Est-ce que quelqu'un a des idées sur ce qui pourrait être à l'origine de cela?
J'espère avoir expliqué le problème assez en détail. N'hésitez pas à poser des questions, si j'ai été trop vague.
Merci pour votre aide. Mise à jour: J'ai essayé d'ajouter un traitement d'erreur et la réponse est "échec de la contrainte". J'ai fait quelques recherches sur ce qui pourrait en être la cause, mais je me bats encore pour trouver une réponse.
Je ne vois pas pourquoi cette réponse a été rejetée. Timo est correct: avec les extensions Chrome, vous pouvez ajouter "unlimitedStorage" au tableau des permissions. Dans mon expérience, cela permet des bases de données de taille illimitée. –