首页 > 解决方案 > XQuery:过滤大量数据

问题描述

我确实有一个包含 150k 条目的 xml 文件(大约 3gb)。示例条目:

<entry>
.... lots of data here ....
<customer-id>1</customer-id>
</entry>

这些条目中的每一个都有一个特定的客户 ID。我必须根据黑名单(3k id 的序列)fe 过滤数据集

let $blacklist-customers := ('0',
'1',
'2',
'3',
....
'3000')

我目前正在检查每个条目中的客户 ID 是否包含在黑名单中,如下所示:

for $entry in //entry
    let $customer-id:= $entry//customer-id
    let $inblacklist := $blacklist = //$customer-id
return if (not($inblacklist)) then $entry else ()

如果不包括在内,它将被退回。

按照这种方法,在大约 2 分钟的处理后,我确实得到了主内存不足的错误。

我试图调整代码,以便我先分组,并且只询问每个组是否包含在黑名单中。但是我仍然会以这种方式得到主内存不足的错误。

for $entry in //entry
    let $customer-id:= $entry//customer-id
    group by $customer-id
    let $inblacklist := $blacklist = //$customer-id
return if (not($inblacklist)) then $entry else ()

处理发生在basex中。主内存不足错误的原因是什么?解决此问题的最佳方法是什么?如果我遵循第二种方法,对数据进行分组是否会减少所需的迭代次数?

标签: xquerybasexxquery-3.0

解决方案


推荐阅读