1

我正在尝试计算 MarkLogic 中 XML 的文档大小,以作为性能的一部分。有人可以帮我解决任何内置函数或任何查询,我可以计算出文档的准确大小吗?我有一个像这样的公式:

{string-length(string(data($doc))) idiv 2}
4

2 回答 2

7

如果“大小”是指如果 XML 文档被序列化为文本(“到磁盘”) 会有多大,

 string-length(xdmp:quote( doc('file.xml') )) 

将使用默认编码和序列化选项为您提供字符数。
如果使用 UTF8,这将从 1:1(字符到字节)到 1:3 不等,这取决于 Unicode 字符的分布以及指定给 xdmp:quote() 的序列化选项与摄取前的类似格式之间的差异(或导出后)。对于拉丁语言和默认设置,它通常接近 1:1——为了更准确,您需要指定确切的序列化和编码选项,并将文档保存到文件系统或转换为二进制并获取二进制长度。即使那样,它也将取决于文件系统和操作系统(块大小、文本编码等)。

如果“大小”是指文档在marklogic中“使用”了多少磁盘/内存 ,可以通过对所有数据目录中使用的磁盘空间进行快照来统计确定,然后插入大量文档并拍摄另一个快照然后划分通过 # 的文件。它可能会有很大的不同,这取决于许多因素,例如索引设置、文档之间的相似性、合并率和限制等。

文档以高度压缩的形式存储,通常比文本大小小得多,但索引选项会增加总大小......两者都很大程度上取决于不同文档共享的术语/标记/子字符串的相似性。

如果按大小表示文档在访问时将占用多少内存,那么它的可变性更大,更不容易测量。对于文本内容很少或没有的高度结构化文档,它的范围可以从 0x(完全由索引解决的查询)到 10x 或更多。

于 2016-08-04T02:21:26.580 回答
6

The easiest way I've found to calculate the raw document size (before indexes are taken into account) is to covert the document into a binary and us xdmp:binary-size().

Here is an example of how you'd do that

xdmp:binary-size(xdmp:unquote(xdmp:quote($doc),(),"format-binary")/binary())
于 2016-08-04T12:33:18.030 回答