我在尝试使用Ydn-db检索大量数据时遇到了麻烦。
问题是:
- 我有一个大的JSon文件,我想存储在我的应用程序中以便离线使用它
-I查询文件,然后使用db.put
- 然后,如果我使用db.values
“打印”存储的数据,我只会获得之前保存的文本的一部分。
你也可以测试一下这里给出的Todo列表演示作为例子:http://dev.yathit.com/demo/ydn-db/todo.html
如果你输入,假设输入中有一个1MB的文字,你不会保存整个文本,只是它的一小部分。
有没有办法解决这个问题?
谢谢!
编辑: 这是我正在谈论的http://flatic.com/test.html
的一个实例编辑2: 好吧,我想我发现了一个临时解决方案,看起来YDN-DB不能存储超过100个Json对象,所以不要直接保存我的Json数据,如:
db.put('table',largeJsonData);
我首先将largeJsonData
作为字符串放在一个简单的Json数组中,如下所示:
var data = {
"json":largeJsonData
};
db.put('table',data);
现在我可以读取数据:
db.values('table').done(function(items) {
console.log(items[0].json);
});
但是您无法通过任何给定的Id进行索引搜索或获取特定值
答案 0 :(得分:1)
请通过简单测试证明您的申请。我不认为浏览器限制为每条记录1mb。如果失败,它就会失败。部分提交是不可能的。
如果在JSON序列化期间可能丢失websql。可能。尚未测试过。
更新问题后编辑。
您的数据不是文本,您解析它 - 并成为JSON对象的数组。 db.put
会将它们作为单独的记录单独插入。 db.values
有100个记录限制。如果你对db.values('todo', null, 100000)
施加限制,你应该得到所有。
100限制是用户常见的惊喜。我讨厌API的惊喜。但我觉得这种方法应该有限制。
答案 1 :(得分:1)
在演示中,浏览器显示正在截断输入字段。
String.length
为您提供英文字节大小。我使用了复制/粘贴的.87 mb字符串“stackoverflow.com |”:https://gist.github.com/editor/f85257b29f51ac5a3280
您可以在此处看到我的big_string
并将其分配给输入字段值。
当我读回它时,它的数量减少了397308个字节。
IDB确实受其实施技术的约束(Chrome中的LevelDB,Firefox中的SQLLite)。例如,我保证大数据对象的写入量会很低。但是,如果Kyaw说作为图书馆的作者没有图书馆限制,就YDN而言,我会信任他。