gpt4 book ai didi

XML 搜索——速度快,节点内的文本或文本作为属性值

转载 作者:数据小太阳 更新时间:2023-10-29 02:10:34 29 4
gpt4 key购买 nike

不知道这是不是一个正确的问题,但出于好奇,我想知道哪个会被快速搜索。例如-

<A>
<Name>John</Name>
</A>

<A>
<Name n="John"/>
</A>

我已经存储了数百万个文本作为属性值,尽管字符大小不够大。以上只是为了更好地理解这个问题的一个例子。

现在如果使用 XML 数据库,如 BaseX、eXists 等,我尝试搜索或创建所有名称并为其建立索引,那么哪个会更快?

最佳答案

这是依赖于实现的,所以不能对所有 XML 数据库进行概括。虽然在这个简单的例子中,我猜它对所有数据库都是一样的:没关系。

我将为 BaseX 解释这里会发生什么。假设您使用第一个结构并且想要获得 <A/>元素。所以你使用像这样的 XPath

//A[Name = "John"]

这将针对以下查询进行优化:

db:text("your-database", "John")/parent::*:Name/parent::*:A

而您的第二个数据结构的 XPath 可能看起来像这样:

//A[Name/@n = "John"]

将被优化为

db:attribute("your-database", "John")/self::*:n/parent::*:Name/parent::*:A

如您所见,除了多一个路径步骤(因为您必须访问属性)之外,这是非常便宜的,主要区别在于使用 db:text()db:attribute() .但是作为documented , 这两个函数都将使用值索引(如果存在)(默认情况下),并且由于索引查找会非常快。

实际上,如果您正在设计一个基于 XML 的应用程序并希望以后使用 XQuery 检索信息,您肯定会遇到其他瓶颈,例如使用查询或嵌套 for 循环的非索引。

关于XML 搜索——速度快,节点内的文本或文本作为属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24955175/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com