我想创建一个简单的数据库系统,并且可能使用JSON作为主数据格式进行导入和导出(包括完整数据库备份)。所以我的问题是:与从其他系统导入时的速度(如(更快的)二进制文件)相比,解析JSON的速度有多快,甚至来自大 JSON结构(想想千兆字节),或者(更慢) )XML)?
编辑:澄清一下,我想知道解析JSON(进入某种内部数据库格式)的速度有多快,但不知道它作为内部存储机制的速度有多快。 因此,不会查询此JSON数据等,而只是解析为另一种格式。另外,我问这个问题的主要意图是我想知道JSON是否比XML更容易解析,因为更小的分隔符(']'或'}'而不是''或''),如果它可能是由于非常简单的分隔符,因此速度与二进制格式相似。 (例如,也许json可以像这样解析:record delimiter = ascii code xx(xx是大括号或括号),除非前面有ascii xx(xx是一些转义字符)。)
答案 0 :(得分:3)
它肯定比MySQL(对于服务器)或SQLite(对于客户端)要慢很多,比这些要好。
此外,JSON速度几乎完全取决于实现。例如,你可以eval()
它,但不仅是风险很大,它也比真正的解析器慢。无论如何,可能有比JSON解析器更好的优化XML解析器,因为它是一种更常用的格式。 (因此,获取一个GB大小的XML并想象相同的结果,但速度较慢)。
说真的,JSON从来没有用过大事。如果可能,请使用真实数据库。
很多原因。我会尝试列出一些。
{}
s(非常类似于XML <>
s) 这意味着解析器必须检查对象块的结尾位置。还有其他一些,例如[]
和""
。在传统的数据库中,没有“结束标记”或“结束括号”,所以它更容易阅读。
因此,在您甚至可以阅读一些JSON之前,您必须阅读整个文件。这意味着最好等待你提到的大小几分钟,并且可以在不到一秒的时间内查询数据库(因为层次结构存储在开头)。
在数据库中,交易大小以提高性能。您可以使VARCHAR(512)
并且所有字符串都将被空填充以占用512个字节。为什么?因为这样你可以知道第四个值是偏移量2048。你无法用JSON做到这一点,因此性能会受到影响。
...因为它是一种网络格式 这可能看起来像专业人士,但从表现的角度来看,这是一个骗局。
因此,一些解析器可能允许存在和考虑不必要的数据,例如注释。 Chrome的原生JSON用于举例说明(不再是)
没有数据库引擎使用eval()
对吗?
人们可能会将任何内容放入JSON文件中,因此解析器是防御性的,并且有时会尝试读取无效文件。数据库不应该默默地修复损坏的文件 您可以手动编写JSON而不是数据库!
一些原生解析器(如IE8)中存在错误,并且对大多数浏览器的支持是非常初步的,并且比最快的XML解析器慢。仅仅因为XML被使用了很长时间而且史蒂夫鲍尔默有一个XML迷信,所以公司通过制作几乎任何与XML兼容的东西来取悦他。虽然JSON是Crockford成功度过的周末时光之一。
如果您为自己喜欢的语言选择一个随机的开源JSON解析器,它有可能是太阳下最好的解析器吗?那么,对于XML,你确实有awesome parsers like this但JSON的用途是什么?
为什么JSON应该降级到预期用例需要更多理由?
答案 1 :(得分:3)
JVM Serializers项目中可以找到JSON,XML和许多其他内容的基准。结果太复杂,无法在此重现,但最好的JSON结果(比较手动和数据绑定类)比最佳XML结果要好得多。这种比较并不完整,但这是一个起点。
编辑:截至目前(2012-10-30),由于基准正在修订,因此没有公布结果。但是,有一些preliminary results可用。答案 2 :(得分:2)
如果您将JSON视为数据传输的中间格式,您可能还需要考虑二进制备选方案,因为它们需要更少的磁盘空间和网络带宽(压缩和未压缩),因此您可以更快地解析因为输入解析的时间更短。
如果您运行自己的基准测试,请确保针对同一语言对多个解析器进行基准测试,例如:在纯Python中实现的JSON解析器预计会比用C编写的JSON解析器慢得多 - 但是在同一编程语言中,您可能会发现不同实现之间存在显着的速度差异(最多2倍,但可能是5倍)同样。
答案 3 :(得分:0)
数据库是一个具有更快搜索功能的文件系统。如果您可以使用JSON实现相同的功能,那么事情就很容易了。您必须使系统从JSON文件中更快地搜索内容。