2016-05-12 84 views
0

有沒有辦法在應用程序範圍內聲明一個變量。這個變量應該留在內存中並且服務於所有的請求,而不需要爲每個請求創建它。像會話一樣,但它不受特定用戶的束縛。xQuery應用程序範圍變量?

我在找什麼是類似於php APC緩存。

回答

2

會話字段提供了一種可能性;另一種可能是服務器領域:

http://docs.marklogic.com/xdmp:set-server-field

服務器場是提供給主機上的應用程序服務器的所有請求。

+0

嗨@ehennum,謝謝你的建議。其實,這正是我所尋找的。 –

0

由於這是標記「marklogic」我將提供一個MarkLogic無標準答案。 基於標準的答案是'不'或'超出範圍的問題',因爲XQuery沒有定義'應用程序範圍'(超出頂層模塊語句的執行 - 在某些情況下可以稱爲「應用程序範圍」)

在MarkLogic有一個名爲「會話」支持的功能; 針對通常稱爲「Session」的Web應用程序。 ()(顯式或隱式使用支持的認證HTTP服務器運行)登錄:

會議由第一次調用xdmp創建。 會話'狀態'是在首次寫入會話字段時創建的(顯式地通過xdmp:set-session-field,或者在某些情況下隱式地(*))。

https://docs.marklogic.com/xdmp:set-session-field

會議字段是地圖名(XS:字符串)項()* 他們只要最後的會話持續(見上面的鏈接時到期票據)。

需要注意的是跨越多個HTTP請求會話要求客戶端通過適當的HTTP cookie處理參與(ML服務器有沒有能力,也沒有試圖關閉套接字除了通過HTTP Cookie的機制後,跟蹤的請求。)

如果您使用的是現代瀏覽器,則不需要禁用Cookie。 如果您使用的是現代Web客戶端庫,則可能會爲您完成。 如果您正在使用一個MarkLogics發佈的SDK(java,node,xcc),它將爲您完成。 如果您正在瀏覽負載平衡器,那麼可能需要針對「HTTP Session Affinity」(基於Cookie)配置3級路由器,網關,代理...,以確保Cookie傳遞不變並且SessionID cookie被映射爲HTTP關聯。(**)

注意:IT設備的功能和術語差別很大。 常被稱爲「會話親和性」的內容可能與cookies不相關,也可能與正確的cookies有關。這些通常可以配置爲正常工作,但可能需要自定義代碼或配置。

(*)通過創建多語句事務,可以在某些情況下隱式創建會話狀態。 (**) https://docs.marklogic.com/guide/node-dev/extensions

+0

嗨@DALDEI,謝謝你提供的信息豐富的答案。實際上,使用Cookie和網絡管理映射操作的部分很有用。但是,我正在尋找像ehennum建議那樣簡單的東西。 –