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