我希望能有一个全局变量,可以在不同的.xqy页面中使用。在Marklogic Server中,我能否声明这样一个变量?
你可以在任何模块中声明变量。例如,在config.xqy模块中。
declare variable $PRECISION as xs:integer := 4;
要使用这个变量,你需要在你的工作模块中导入这个模块。
import module namespace config = "http://your-namespace" at "config.xqy";
并且参考这个变量:
$config:PRECISION
https://github.com/marklogic/commons/blob/master/properties/properties.xqy
你可能已经考虑过这一点,但你也可以简单地将全局数据存储在数据库上的文档中,并使用doc()访问它 - 或者如果你需要从不同的数据库访问它,可以使用eval()。你有几个选择。如果你需要一个全局常量变量,那么@Andrew Orlov的答案中提到的config.xqy
方法非常好,因为它避免了对properties.xml
文件的并发访问所带来的任何锁定。
如果你需要一个可以在节点集群中被改变的变量,那么@wst链接的property.xqy
示例似乎使用全局分配的命名空间来嵌入可检索的键和值。相当聪明。然而,我不确定这是否适用于大量更改。
@Eric Bloch提供的E-node特定变量很好,但请注意它将无法在系统重新启动后存活。
我很想知道它们在性能方面如何比较。