HTML5 Web SQL DB - 最大表大小?

Posted

技术标签:

【中文标题】HTML5 Web SQL DB - 最大表大小?【英文标题】:HTML5 Web SQL DB - Maximum table size? 【发布时间】:2010-10-28 04:21:59 【问题描述】:

我正在构建一个相当复杂的 html5 Web 应用程序,该应用程序从 Web 服务检索其数据以填充 Web SQL 数据库。

测试数据一切顺利,然后我尝试使用一些真实数据(一个包含大约 10 列和超过 180,000 行的表)并遇到了一些问题。

我以 500 个插入的“块”形式发送 SQL 响应,然后运行事务并从 Web 服务获取下一个响应。这工作正常,直到表格达到大约 9000 行,然后它就不再需要了。此时数据库文件大小仍低于 2MB,而我将最大大小设置为 20MB,所以我认为这不是问题。

我已经设法用更简单的代码重新创建了一个类似的问题,所以其他人可以看到我在说什么。 (由于某种原因,我无法将其全部留在“代码块”中(对不起))

//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 中创建表格,并正确输入所有数据。数据库大约为 4MB。 Safari 将允许我添加更多行,并且我在 Safari 中的数据库大小高达 10MB 左右。

如果我尝试删除表的内容并将迭代次数增加到 20,000 次,Chrome 不会完成事务。

有没有人知道是什么原因造成的?

我希望我已经足够详细地解释了这个问题。如果我太含糊,请随时提出任何问题。

感谢您的帮助。

更新:我尝试添加一些错误处理,但响应是“约束失败”。我已经对可能导致此问题的原因进行了一些研究,但我仍在努力寻找答案。

【问题讨论】:

【参考方案1】:

您可以创建一个简单的 chrome 扩展,消除本地数据库大小的限制。

【讨论】:

我不明白为什么这个答案被否决了。 Timo 是正确的:使用 Chrome 扩展程序,您可以将“unlimitedStorage”添加到权限数组中。以我的经验,这允许无限大小的数据库。【参考方案2】:

我认为您正在达到 Chrome 的硬编码 5MB WebSQL DB 大小限制。我可以验证您的代码是否按照您的描述失败,就像(最新)Chrome v8.0.552.215 上的 db 大小突破 5120K

错误消息表明已超出允许的内存等。据我所知,Chrome 不使用 WebSQL DB 大小参数。

更多关于这个on the Chromium group的讨论

约束错误可能是一个单独的问题,因为您可以通过尝试插入重复记录来引发此类错误。简单地多次运行插入示例代码而不调整迭代初始化和边界参数可能会导致这种情况。

【讨论】:

以上是关于HTML5 Web SQL DB - 最大表大小?的主要内容,如果未能解决你的问题,请参考以下文章

PhoneGap下Web SQL实践

sql 获取db的表大小

sql 查找SQL表大小。取得DB的表大小。来自http://stackoverflow.com/questions/7892334/get-size-of-all-tables-in-databas

表空间支持的最大数据文件大小的算法数据库限制数据文件文件头保留数据块数

DB2SQL1585N 由于没有具有兼容页面大小的可用系统临时表空间,因此无法创建临时表。SQLSTATE=54048

在pl/sql中创建的表空间超出了db_fills的最大值?怎么回事?