2012-06-15 8 views

Odpowiedz

15

Możesz zadeklarować zmienną w dowolnym module. Na przykład jest to config.xqy.

declare variable $PRECISION as xs:integer := 4; 

Aby użyć tej zmiennej, należy zaimportować ten moduł do modułu roboczego.

import module namespace conf = "http://your-namespace" at "config.xqy"; 

i odnoszą się do tej zmiennej:

$config:PRECISION 
2

Jeśli potrzebujesz wartości dostępnych na całym serwerze, istnieje biblioteka w Marklogic XQuery Gmin do przechowywania par utrzymujących klucz/wartość:

https://github.com/marklogic/commons/blob/master/properties/properties.xqy

Być może już to rozważałeś, ale możesz po prostu przechowywać dane globalne w dokumencie na bazie danych i uzyskać dostęp do i doc() - lub eval(), jeśli chcesz dostać się do niego z innej bazy danych.

5

Jeśli twoja aplikacja działa na pojedynczym węźle E, możesz użyć server fields, które są w pewnym sensie zaprojektowane dla tego przypadku użycia.

1

Masz kilka opcji. Jeśli potrzebujesz globalnej zmiennej stałej, metoda config.xqy wspomina, że ​​odpowiedź @Andrew Orlov jest świetna, ponieważ unikasz blokowania przed równoczesnym dostępem do pliku properties.xml.

Jeśli potrzebna jest zmienna, która może być zmutowana w klastrze węzłów, przykład property.xqy połączony przez @wst wydaje się wykorzystywać globalnie przydzielone przestrzenie nazw do osadzenia odzyskanego klucza i wartości. Całkiem sprytnie. Jednak nie jestem pewien, ile to oznacza dla ciężkich poziomów zmian.

Zmienna konkretna z @Eric Bloch jest dobra, ale pamiętaj, że nie przetrwa restartu systemu.

Chciałbym wiedzieć, w jaki sposób te wszystkie porównanie pod względem wydajności.