Abb*_*fei 5 json database-design
我想创建一个简单的数据库系统,并且可能使用JSON作为导入和导出的主要数据格式(包括完整数据库备份).所以我的问题是:与从其他系统(如(更快的)二进制文件或(慢速)XML)导入时的速度相比,即使从大 JSON结构(想想千兆字节)解析JSON的速度有多快?
编辑:澄清一下,我想知道解析JSON(进入某种内部数据库格式)的速度有多快,但不知道它作为内部存储机制的速度有多快.因此,不会查询此JSON数据等,而只是解析为另一种格式.
另外,我问这个问题的主要意图是我想知道JSON是否比XML更容易解析,因为较小的分隔符(']'或'}'而不是''或''),如果它甚至可能类似于速度到二进制格式,因为非常简单的分隔符.(例如,也许json可以像这样解析:record delimiter = ascii code xx(xx是大括号或括号),除非前面有ascii xx(xx是一些转义字符).)
它绝对比MySQL(对于服务器)或SQLite(对于客户端)要慢得多,这是首选。
此外,JSON 速度几乎完全取决于实现。例如,您可以eval()这样做,但这不仅风险很大,而且还比真正的解析器慢。无论如何,可能有比 JSON 解析器更好的优化的 XML 解析器,只是因为它是一种更常用的格式。(因此获取 GB 大小的 XML 并想象相同的结果,但速度较慢)。
说真的,JSON 从来就不是用来做大事的。如果可能,请使用真实的数据库。
很多原因。我会尝试列出一些。
{}s(很像 XML 的<>s)这意味着解析器必须检查对象块的结束位置。还有其他的,例如[]s 和""s。在传统数据库中,没有“结束标签”或“结束括号”,因此更易于阅读。
因此,在您甚至可以读取某些 JSON 之前,您必须读取整个文件。这意味着最多为您提到的大小等待几分钟,并且数据库已准备好在不到一秒钟的时间内进行查询(因为层次结构存储在开头)。
在数据库中,大小是为了性能而交易的。您可以制作VARCHAR(512)并且所有字符串都将被空填充以占用 512 个字节。为什么?因为这样你就可以知道第 4 个值在偏移 2048 处。你不能用 JSON 来做到这一点,因此性能会受到影响。
...因为它是一种网络格式。
这可能看起来像一个专业人士,但从性能的角度来看,这是一个骗局。
因此,某些解析器可能允许出现和考虑不必要的数据,例如注释。例如,Chrome 的原生 JSON 用于允许评论(不再)。
没有数据库引擎使用eval()对吗?
人们可能会将任何内容放入 JSON 文件中,因此解析器是防御性的,有时会尝试读取无效文件。数据库不应该静默修复损坏的文件。
您可以手动编码 JSON,但不能手动编码数据库!
一些本机解析器(如 IE8 的)中存在错误,并且对大多数浏览器的支持非常初步,并且比最快的 XML 解析器慢。仅仅因为 XML 已经被使用了很长时间,而且 Steve Ballmer 对 XML 有一种迷恋,所以公司通过使几乎所有东西都与 XML 兼容来取悦他。虽然 JSON 是 Crockford 成功的周末消遣之一。
如果您为自己喜欢的语言随机选择一个开源 JSON 解析器,那么它有多大可能成为天底下最好的解析器?好吧,对于 XML,您确实有像这样很棒的解析器但是 JSON 有什么?
需要更多理由为什么 JSON 应该降级到其预期用例?
JSON、XML 和许多其他内容的基准可以在JVM Serializers项目中找到。结果太复杂,无法在此处重现,但最佳 JSON 结果(比较手动类和数据绑定类)比最佳 XML 结果好很多。这种比较并不完整,但它是一个起点。
编辑:截至目前(2012-10-30),还没有公布结果,因为基准正在修订。不过,目前已有一些初步结果。
| 归档时间: |
|
| 查看次数: |
4700 次 |
| 最近记录: |