MarkLogic中如何获取集合的总存储大小?
快速估算MarkLogic集合的字节级存储大小
你的现有代码仅返回集合内的文档/片段数量,要获取字节级存储大小,可采用以下几种方法:
快速估算(性能优先,适合大集合)
利用cts:aggregate做求和聚合,搭配xdmp:estimate实现快速估算,无需遍历全量文档:
xquery version "1.0-ml"; let $collection := "/citation/TRWA" let $total-size-estimate := xdmp:estimate( cts:aggregate("sum", xdmp:document-size(cts:search(collection($collection), cts:true-query()))) ) return $total-size-estimate
xdmp:document-size:返回单篇文档的原始内容字节数cts:aggregate("sum", ...):对集合内所有文档的大小求和xdmp:estimate:基于索引快速计算聚合结果的估算值,速度远快于全量遍历
精确计算(结果优先,适合小集合)
如果需要完全准确的数值,可遍历集合内每一篇文档并求和,但大集合下性能会明显下降:
xquery version "1.0-ml"; let $collection := "/citation/TRWA" let $total-size-exact := sum( for $doc in cts:search(collection($collection), cts:true-query()) return xdmp:document-size($doc) ) return $total-size-exact
补充:估算含索引的实际磁盘存储大小
若需要统计包含MarkLogic索引在内的实际磁盘占用,可通过抽样法估算:
- 随机选取集合内一定数量的文档,计算单篇的实际存储大小
- 取平均单篇存储值,乘以集合总文档数(即你现有代码返回的数值)
示例代码(抽样100篇计算平均):
xquery version "1.0-ml"; let $collection := "/citation/TRWA" let $sample-size := 100 let $sample-docs := cts:search(collection($collection), cts:true-query())[1 to $sample-size] let $avg-storage-size := avg(xdmp:node-storage-size($sample-docs)) let $total-doc-count := xdmp:estimate(cts:search(collection($collection), cts:true-query())) let $total-storage-estimate := $avg-storage-size * $total-doc-count return $total-storage-estimate
xdmp:node-storage-size:返回节点(含索引)在磁盘上的实际存储字节数
内容的提问来源于stack exchange,提问作者thichxai
相关产品推荐
相关产品推荐

