JSON

保持冷静,节制使用JSON

字号+ 作者:H5之家 来源:H5之家 2016-10-27 15:02 我要评论( )

如果只把JSON用在应用程序中不同层级间的数据交换上,那还好。而当人们开始要将其作为一种数据库存储格式来使用时,就不好了。

来自:开源中国翻译频道

链接:https://www.oschina.net/translate/keep-calm-and-json(点击尾部阅读原文前往)

由 Robbie_Zhu, agile, leoxu, 混元归一, Tony 协作翻译完成

原文:https://dzone.com/articles/keep-calm-and-json

 


JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。它容易被人们阅读和编写,也容易被软件所读取和生成。如下是用JSON描述的一份客户数据。它能很好的用在交换和集成商。

 

目前使用还不错。 如果只把JSON用在应用程序中不同层级间的数据交换上,那还好。而当人们开始要将其作为一种数据库存储格式来使用时,就不好了。当我第一次遇到将JSON作为一种数据库中的数据格式时,感到非常惊奇,因为数据库要花费不少代价,每一条记录里面键和值都要存,而且每次查询都要进行处理。在我的演讲和文章里面,已经有许多人提过这个问题了。 以下是经常会遇到的异议: 1 、JSON 是文本,它效率不高。 2、JSON 没有没有可执行结构,毫无数据质量可言。 3、每一个文档(行)都得是键值对? 你肯定是疯了才会这样做。 让我们一个一个讨论这些异议。 1 JSON 是文本,它效率不高。   如我们所知RDBMS在电子商务中起到至关重要的作用,甚至是即将到来的Web2.0时代,RDBMS也将在网站后台运行。当人类登月以后,交易花费从 $5下降到 $0.02,于此同时Jim Gray进行了最后一次航海旅行。这是因为在90年代,经过在RDBMS的巨大的努力和相关硬件供应商持续的改进下,赢得了TPC基准测试之战。Oracle发布了支持SUN的硬件的版本。Sybase打破了HP的记录。Informix击败SGI。IBM进行了内部变革。之后,Oracle将卷土重来。在这个过程,每个公司都愿意花费 $25,000来占据一整页华尔街日报来吹嘘自己,是的,在90年代,人们以纸质的形式阅读报纸。 通过这些供应商的努力,数据库优化了物理设计,访问路径,I/O,数据读取,事务等等。这促进了许多硬件创新,例如:从微处理器指令系统到SMP系统设计,无线宽带技术等。数据库压缩每个时钟周期,每个IO,每个锁,记录的优势,每一个瓶颈都被强有力的改进。每个硬件供应商都尝试获得更高的TPC测评数。 RDBMS十分高效。 RDBMS有一种成本意识 -—— 空间,时间,时空,甚至一切。 与RDBMS存储格式相比,JSON效率低下。 ● 所有的数据都是字符形式的JSON需要转换处理。 ● 即使数值数据也存储在文本中。 ● 每个值在每个文档中都带有其键名称(键值)。需要更多的存储和处理。 ● 允许表示复杂的结构,导致运行时开销。 ● 官方支持小集数据类型。无小数,无时间戳记等。 在数据库中使用JSON意味着: ● 数据库引擎必须理解每个文档的模式并处理它们,而不是处理常规元组和属性(行和列)。 ● 必须解析和处理JSON中每个键值的数据类型 ● JSON可能是XML的一个精减的版本,但它仍然很庞大。 有这么多低效率的缺陷,为什么还有数据库使用JSON作为数据模型呢?或者说实现JSON数据类型呢? 的确。 JSON作为数据交换格式被发明,现在是公共API——数据集成场景的首选格式。大多数设备,大多数软件层可以以JSON的形式消费和产品数据。以JSON存储和发布数据意味着,除了下面的优点之外,API和应用程序还可以在他们熟悉的介质中与数据库交互。你必须考虑n层应用程序效率,而不是将其与元组插入和更新进行比较。大多数RDBMS现在已经将JSON添加为数据类型。随着JSON使用量的增长,存储和处理效率将会提高。 2 JSON在数据库中不要求数据结构。因此数据质量差。   自从JSON数据库不要求任何结构。不管是有意,还是无意,应用程序都可以插入任何格式的数据了,只要这些数据是有效的JSON。 基于JSON的数据库倾向于“读取模式“。也就是说,读者有责任去理解和翻译每一个文档或查询结果的模式。查询语言,如N1QL ,就有很多文档本身的自解读功能。 已经提到过的一些工具,如Ottoman 和 Mongoose可以帮你去验证一个给定的JSON是否违反了已定义的结构。尽管对将数据加载进JSON数据库来说,这不是一个好的安全装置,但是在应用层对数据的正确控制可以帮助你提高数据的一致性。 另一方面,灵活性,JSON的内嵌结构可以帮助你在一个单独的JSON文档中匹配对象数据。 使用JSON也可以避免对象关系映射的开销。应用程序的规范和修改对象。为了在关系模式中存储这些数据,你需要在多个关系中规范这些数据,把它们存储在离散的表中。当你需要重建对象时,你需要在这些表中连接数据,构建返回对象。而对象关系映射层(如Hibernate自动完成这个过程),你仍然会消耗性能,因为你为每步执行了多个查询。

通过对象在JSON的分层内嵌结构中的表示,避免了很多对象关系映射的消耗。

 

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评