Asw*_*mar 1 xquery marklogic nosql xquery-3.0 marklogic-8
我试图在部分性能中计算MarkLogic中XML的doc大小.有人可以帮我解决任何内置函数或任何查询,我可以计算我的文档的准确大小?我有一个像这样的公式:
{string-length(string(data($doc))) idiv 2}
Run Code Online (Sandbox Code Playgroud)
如果"大小"你指的是XML文档有多大是如果它序列化为文本("磁盘"),
string-length(xdmp:quote( doc('file.xml') ))
Run Code Online (Sandbox Code Playgroud)
将使用默认编码和序列化选项为您提供字符数.
如果使用UTF8,则将从1:1(字符到字节)变为1:3,具体取决于Unicode字符的分布以及为xdmp:quote()指定的serializaiton选项与摄取前的类似格式之间的差异(或出口后).对于拉丁语言和默认设置,它通常接近1:1 - 为了更准确,您需要具体确定序列化和编码选项,并将文档保存到文件系统或转换为二进制并采用二进制长度.即使这样,它也将依赖于文件系统和操作系统(块大小,文本编码等).
如果用'size'表示文档在marklogic 中使用了多少磁盘/内存,可以通过获取所有数据目录中使用的磁盘空间的快照来统计确定,然后插入大量文档并拍摄另一个快照然后分割通过文件数量.它可能会有很大差异,具体取决于许多因素,例如索引设置,文档之间的相似性,合并率和限制等.
文档以高度压缩的形式存储,通常比文本大小小得多,但索引选项会增加总大小......两者都很大程度上取决于不同文档共享的术语/标记/子串的相似程度.
如果按大小表示文档在访问时将占用多少内存,则更加可变且不易测量.对于具有很少或没有文本内容的高度结构化文档,它可以从0x(完全由索引解析的查询)到10x或更多.
我发现计算原始文档大小的最简单方法(在考虑索引之前)是将文档转换为二进制文件和我们xdmp:binary-size().
这是一个如何做到这一点的例子
xdmp:binary-size(xdmp:unquote(xdmp:quote($doc),(),"format-binary")/binary())
Run Code Online (Sandbox Code Playgroud)