YDN-DB 可以一次处理大型条目吗?
Posted
技术标签:
【中文标题】YDN-DB 可以一次处理大型条目吗?【英文标题】:Can YDN-DB handle large entries at once? 【发布时间】:2014-04-26 13:41:42 【问题描述】:我在尝试使用 Ydn-db 检索大量数据时遇到了麻烦。
问题是:
-我有一个大的 JSon 文件,我想将它存储在我的应用程序中以供离线使用
-我查询文件然后使用db.put
成功保存数据
-然后,如果我使用db.values
“打印”存储的数据,我只会得到我之前保存的文本的一部分。
您也可以使用此处作为示例给出的待办事项列表演示对其进行测试: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 进行索引搜索或获取特定值
【问题讨论】:
我想你会发现基于这个子系统的限制:***.com/questions/2989284/… 【参考方案1】:请通过一个简单的测试来证明您的主张。我不认为浏览器限制为每条记录 1mb。如果失败,则整个失败。部分提交是不可能的。
如果是 websql,在 JSON 序列化过程中可能会丢失。可能的。没有测试。
问题更新后编辑。
您的数据不是文本,您对其进行解析 - 并变成 JSON 对象数组。 db.put
会将它们作为单独的记录单独插入。 db.values
有 100 条记录限制。如果你限制db.values('todo', null, 100000)
,你应该得到所有。
100 限制对用户来说是常见的惊喜。我讨厌 API 上的惊喜。但我仍然觉得这种方法应该有一个限制。
【讨论】:
奇怪的是,我能够复制 4092 字节的文本截断。这是我在 Todo 演示中使用的 1mb 字符串:gist.github.com/editor/f85257b29f51ac5a3280 它是演示而不是库吗? 演示井代表库。是复制/粘贴问题吗? 似乎是一个可靠的猜测 我想我找到了问题所在,它就像 db.values 不接受同一个数组中的相似对象,例如,如果你创建一个包含 5 个具有相同内容的对象的 Json 数组,它将采用数组好像它只有 1 个对象。我看到我的 Json 数组有两个相似的对象,它们仅在 1 个数字上有所不同,这在这里造成了问题。 好的.. 我将密钥路径更改为随机自动递增的路径,因此它们始终是唯一的。现在它终于工作了!问题在于 Keypath 不是唯一的。【参考方案2】:在演示中,浏览器似乎正在截断输入字段。
String.length
给你 ~bytesize 英文。我使用了“***.com|”的复制/粘贴 0.87 mb 字符串:https://gist.github.com/editor/f85257b29f51ac5a3280
您可以在这里看到我将big_string
分配给输入字段值。
当我读回它时,它小了 397308 字节。
IDB 确实受其实现技术的约束(Chrome 中的 LevelDB,Firefox 中的 SQLLite)。例如,我保证大型数据对象的写入量会很低。但是,如果 Kyaw 说作为图书馆的作者没有图书馆限制,就 YDN 而言,我会相信他。
【讨论】:
以上是关于YDN-DB 可以一次处理大型条目吗?的主要内容,如果未能解决你的问题,请参考以下文章