HTML5 Web SQL DB - Maximum de la taille de la table?
Je suis à mi-chemin à travers la construction d'une assez complexe HTML5 web app, qui permet de récupérer ses données à partir d'un Service Web pour remplir le Web SQL databse.
Tout allait bien avec les données de test, puis j'ai essayé d'utiliser certaines données réelles (une table, avec près de 10 cols et plus de 180 000 lignes) et a rencontré quelques problèmes.
Je vous envoie les réponses SQL en "morceaux" de 500 inserts et puis l'exécution d'une transaction et de l'accaparement de la prochaine réponse du Service Web. Cela fonctionne bien, jusqu'à ce que le tableau devient à environ 9000 lignes et puis il ne peut pas en prendre plus. À ce stade, la base de données de la taille du fichier est toujours sous 2 mo et j'ai la taille maximum fixé à 20 mo, donc je ne pense pas que c'est la question.
J'ai réussi à recréer un problème similaire avec un simple code, afin que d'autres puissent voir de quoi je parle. (Pour une raison que je ne peux pas obtenir 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 chaîne de valeur, c'est juste quelque chose pour combler la varchar taille (SQLite n'apparaît pas de tampon, un type char).
À la "19000" itérations ci-dessus (ou en dessous) de la table sera créée en Chrome, avec toutes les données saisies correctement. La base de données sera d'environ 4 MO. Safari permettez-moi d'ajouter plus de lignes et j'ai eu la DB taille 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 pas terminer la transaction.
Quelqu'un a une idée de ce qui pourrait être la cause?
J'espère que je vous ai expliqué le problème en donnant suffisamment de détails. N'hésitez pas à poser des questions, si j'ai été trop vague.
Merci pour votre aide.
Mise à jour: j'ai essayé d'ajouter une gestion d'erreur et la réponse est "contrainte a échoué". J'ai fait un peu de recherche sur ce qui peut en être la cause, mais je suis toujours des difficultés à trouver une réponse.
OriginalL'auteur fastAwake | 2010-10-28
Vous devez vous connecter pour publier un commentaire.
Je pense que vous avez frapper un codée en dur de 5 mo WebSQL DB limite de taille de Chrome. Je peux vérifier votre code défaut comme vous le décrivez, tout comme la db taille des bustes à travers 5120K sur (la dernière) Chrome v8.0.552.215
Le message d'erreur indique que le permis de mémoire a été dépassée, etc. Comme je sais que Chrome ne pas utiliser la WebSQL DB taille params.
Plus de discussion sur ce le Chrome groupe
L'erreur de contrainte peut être une question distincte que vous pouvez obtenir une erreur en tentant d'INSÉRER une copie de l'enregistrement. La simple exécution de votre insert exemple de code plus d'une fois, sans tordre l'itération init et limites params peuvent être en cause.
OriginalL'auteur groux
Vous pouvez créer une simple extension chrome qui enlève la restriction de la taille de la base de données locale.
OriginalL'auteur Timo