在MarkLogic 6中将文档存储为JSON的性能优势

时间:2013-07-15 16:23:03

标签: json marklogic

如果我将相同的标记存储在2个单独的文档中,一个XML,另一个JSON,在MarkLogic 6中,MarkLogic会自动将JSON等效项转换为XML,并在这方面对其进行索引,或者都存储在其中各自的格式?

我得到的是,MarkLogic是否将所有文档存储为XML,无论如何,只需在查询时将JSON转换应用于JSON文档?

如果文档以原生格式存储,那么在性能方面是否有利于通过XML在JSON中存储文档?

下面是一个示例代码段:

if($outputFormat="json") then (: result in json format :)       
    let $custom-config :=
        let $config := json:config("custom")
        return (map:put($config, "array-element-names",(xs:QName("lp:lesson_plan"), 
                                                        xs:QName("lp:instructional_segment"),
                                                        xs:QName("lp:strand_type"),                                                             
                                                        xs:QName("lp:resource"),
                                                        xs:QName("lp:level"),
                                                        xs:QName("lp:discipline"),
                                                        xs:QName("lp:language"),
                                                        xs:QName("lp:program"),
                                                        xs:QName("lp:grade"),
                                                        xs:QName("res:strand_type"),
                                                        xs:QName("res:resource"),
                                                        xs:QName("res:ISBN"),
                                                        xs:QName("res:level"),
                                                        xs:QName("res:standard"),
                                                        xs:QName("res:secondaryURL"),
                                                        xs:QName("res:grade"),
                                                        xs:QName("res:keyword"))), 
                map:put($config, "whitespace","ignore"),
                map:put($config, "text-value","value"),
                $config) 
    return json:transform-to-json($finalResult, $custom-config)
else (: finalResult in xml format :)        
    $finalResult

4 个答案:

答案 0 :(得分:4)

MarkLogic是XML原生的,需要将JSON转换为XML以将其存储在数据库中。有一个高级JSON库来执行转换。主要功能是json:transform-to-jsonjson:transform-from-json,如果配置正确,则应提供无损转换。

我认为与您的示例的主要区别在于您是要使用自己的流程转换为XML还是使用MarkLogic的工具包。

有关更多详细信息,请参阅MarkLogic的文档: http://docs.marklogic.com/guide/app-dev/json

答案 1 :(得分:2)

一个脚注:REST API(以及围绕REST API的Java API包装器)为JSON转换为XML提供了一个外观 - 也就是说,API会为您转换为XML。

通常,您不需要考虑转换,除非您在转换后的元素上创建范围和地理空间索引。

如果您需要在客户端支持JSON文档,那么外观很方便。

另一方面,将结构表示为JSON对数据库操作和某些限制没有任何好处。 (例如,XML具有基于标准的烘焙原子数据类型,模式验证以及使用XQuery或XSLT进行的服务器处理。)因此,如果您完全控制数据结构,则可能需要将其写入服务器XML。

答案 2 :(得分:2)

在磁盘上,MarkLogic存储高度压缩的C ++数据结构,表示分层树和相应的索引。 (好吧,这是一种过度简化,但仍然是说明性的。)作为开发人员,有两个地方通常会与这些数据结构进行交互:1)构建查询和应用程序逻辑2)将数据反序列化/序列化为内部数据数据模型。今天,MarkLogic为后者使用XML数据模型(XDM),相应地,前者使用XQuery,XPath和XSLT。我们选择这个堆栈有几个原因:XML擅长表示文本标记和数据结构,并且围绕XML的工具已经成熟且广泛。

话虽如此,JSON已经成为流行的分层数据结构序列化--AJAX中的“X”。虽然我们今天在JSON和MarkLogic的内部数据模型之间没有相同的防水抽象,但我们提供了一组工具,允许您在JSON和XML数据模型之间进行有效且无损的转换。此外,我们的REST和Java API允许您存储,检索甚至查询源自JSON的树结构,而无需考虑此转换步骤; API在管道中处理这个问题。

至于性能,在JSON和XDM表示之间会有一点开销转换。但是,我希望大多数应用程序可以忽略不计。 XML的真正好处在于XQuery,XPath和XSLT在处理数据时的表现力。今天在JSON世界中没有广泛的等价物。

答案 3 :(得分:1)

从MarkLogic 8(2015年2月)开始,JSON现在是本机数据类型,就像XML一样。这消除了对想要专门使用JSON的应用程序的转换层的需求。此外,我们在数据库本身中添加了JavaScript作为一流语言(使用Google的V8引擎)。这意味着您可以使用在数据库中运行且靠近数据的JavaScript编写存储过程,触发器甚至完整的HTTP应用程序。