BaseX(XQuery)中的不同节点占用的时间太长
我试图获取一个大文件中所有不同的start元素BaseX(XQuery)中的不同节点占用的时间太长,xquery,basex,Xquery,Basex,我试图获取一个大文件中所有不同的start元素/products/p:category/start节点。我写了一个查询,如下所示。要取得结果需要很长时间。我正在附加查询信息和XML文件 运行了几分钟后,我停止了执行 查询正在尝试获取所有不同的开始元素。有3个拉丁美洲和加勒比海地区类别元素 declare namespace functx = "http://www.functx.com"; declare namespace p="a:b:c"; declare function functx
/products/p:category/start
节点。我写了一个查询,如下所示。要取得结果需要很长时间。我正在附加查询信息和XML文件
运行了几分钟后,我停止了执行
查询正在尝试获取所有不同的开始元素。有3个拉丁美洲和加勒比海地区类别元素
declare namespace functx = "http://www.functx.com";
declare namespace p="a:b:c";
declare function functx:is-node-in-sequence(
$node as node()? ,
$seq as node()*
) as xs:boolean {
some $nodeInSeq in $seq satisfies deep-equal($nodeInSeq,$node)
};
declare function functx:distinct-nodes(
$nodes as node()*
) as node()* {
for $seq in (1 to count($nodes))
return $nodes[$seq]
[not(functx:is-node-in-sequence(.,$nodes[position() < $seq]))]} ;
let $diff_starts := functx:distinct-nodes(/products/p:category/start)
return $diff_starts
声明命名空间functx=”http://www.functx.com";
声明命名空间p=“a:b:c”;
声明函数functx:是序列中的节点(
$node作为node(),
$seq作为节点()*
)as xs:boolean{
$seq中的一些$nodeInSeq满足深度相等($nodeInSeq,$node)
};
声明函数functx:不同的节点(
$nodes作为节点()*
)作为节点()*{
对于$seq in(1到计数($nodes))
返回$nodes[$seq]
[not(functx:is节点在序列中(,$nodes[position()<$seq]))];
让$diff_start:=functx:distinct节点(/products/p:category/start)
返回$diff_开始
如果您需要更多详细信息,请告诉我
将相当多的节点与FunctX提供的功能进行比较非常昂贵,而且远远超出了与项目数量成线性关系的成本 FunctX通常是一个整洁的库,但通常不能很好地扩展现有的大数据(尽管XML数据库可以很好地处理大得多的数据而不会出现问题) 在这个查询中,我首先在线性时间内获取所有不同的值(在节点查找的数量中;用于获取不同的值),然后对所有节点进行另一次线性扫描,以获取每个值的第一个结果节点。我的笔记本电脑上的总执行时间约为700毫秒
declare namespace p="a:b:c";
for $date in distinct-values(/products/p:category/start)
return (/products/p:category/start[. eq $date])[1]