臨時(shí)資源生命周期的(de)管理采取以(yǐ)下策略:在(zài)确保服務器端内存、硬盤空間等資源占用可控的(de)前提下盡可能延長生命周期,或選擇将臨時(shí)資源存儲在(zài)MongoDB中。

此外,生命周期内,重啓服務後,存儲在(zài)本地(dì / de)的(de)臨時(shí)資源會被清空。

此處主要(yào / yāo)爲(wéi / wèi)您介紹如何在(zài)配置文件中配置臨時(shí)資源存儲,在(zài) iServer 頁面上(shàng)配置臨時(shí)資源存儲請參見臨時(shí)資源存儲設置

使用本地(dì / de)存儲臨時(shí)資源

您可以(yǐ)在(zài)系統配置文件(【SuperMap iServer 安裝目錄】\webapps\iserver\WEB-INF\iserver-system.xml)中,設置使用本地(dì / de)存儲臨時(shí)資源,包括内存空間阈值maxBytesOnHeap和(hé / huò)磁盤空間阈值maxBytesLocalDisk。其中,maxBytesOnHeap 默認爲(wéi / wèi)100M,maxBytesLocalDisk 默認爲(wéi / wèi)10G,您可根據需要(yào / yāo),自行設置所需的(de)空間大(dà)小。還支持添加<diskStorePath>參數,設置臨時(shí)資源在(zài)磁盤中存存儲路徑,默認的(de)存儲路徑爲(wéi / wèi)【SuperMap iServer Java 安裝目錄】\temp\tmpResources。清理臨時(shí)資源時(shí)使用的(de)算法,可以(yǐ)通過添加<memoryStoreEvictionPolicy>參數來(lái)設置。此外, 更多參數設置請參考:EhcacheRepoSetting

  <!-- 臨時(shí)資源存儲配置-->  
  <repository class="com.supermap.services.rest.repository.EhcacheRepoProvider" name="localRepository"> 
    <!-- 臨時(shí)資源存儲在(zài)本地(dì / de) -->  
    <config class="com.supermap.services.rest.repository.EhcacheRepoSetting"> 
      <!--最大(dà)允許占用的(de)内存大(dà)小-->  
      <maxBytesOnHeap>200m</maxBytesOnHeap>  
      <!--最大(dà)允許占用的(de)磁盤空間大(dà)小-->  
      <maxBytesLocalDisk>10g</maxBytesLocalDisk>  
      <!-- 磁盤存儲路徑 -->  
      <diskStorePath>D:\SuperMapiServer8C\temp\tmpResources</diskStorePath>  
      <!-- 清理臨時(shí)資源使用的(de)算法 -->  
      <memoryStoreEvictionPolicy>LRU</memoryStoreEvictionPolicy>  
      <!--掃描存儲在(zài)磁盤上(shàng)數據是(shì)否過期的(de)間隔時(shí)間,單位是(shì)秒-->  
      <diskExpiryThreadIntervalSeconds>120</diskExpiryThreadIntervalSeconds> 
    </config> 
  </repository>  
  1. 内存空間阈值

由于(yú)臨時(shí)資源存放在(zài)内存中可以(yǐ)保證存取的(de)效率,但是(shì)占用的(de)内存空間太大(dà)時(shí)又會影響服務器運行效率,因此需要(yào / yāo)設置一(yī / yì /yí)個(gè)相對合理的(de)内存空間阈值。當臨時(shí)資源占用的(de)内存超過這(zhè)個(gè)阈值的(de)時(shí)候,服務端将默認采用 LRU 算法(Least Recently Used)對臨時(shí)資源進行處理,即把最近最少使用的(de)臨時(shí)資源緩存删除。删除臨時(shí)資源的(de)算法默認爲(wéi / wèi)LRU算法,可以(yǐ)通過<memoryStoreEvictionPolicy>參數來(lái)設置。

  1. 硬盤二級緩存阈值

由于(yú)保存在(zài)内存中的(de)臨時(shí)資源有限,爲(wéi / wèi)保證其存活周期,iServer支持将臨時(shí)資源保存在(zài)硬盤中,如果客戶端請求的(de)資源在(zài)内存中訪問不(bù)到(dào),系統會去硬盤中查找。 當這(zhè)些臨時(shí)資源緩存占用的(de)空間太大(dà)時(shí),同樣可能會影響服務器的(de)運行,因此也(yě)需要(yào / yāo)設置保存臨時(shí)資源的(de)磁盤空間阈值。當臨時(shí)資源占用的(de)磁盤空間超過這(zhè)個(gè)阈值的(de)時(shí)候,将進行緩存清理。緩存清理時(shí),同樣采用 LRU 算法。

使用MongoDB存儲臨時(shí)資源

由于(yú)本地(dì / de)存儲臨時(shí)資源的(de)資源存儲空間有限,因此存活時(shí)間也(yě)會受限。SuperMap iServer 支持使用 MongoDB 存儲臨時(shí)資源,可有效延長臨時(shí)資源的(de)存活時(shí)間。此外,MongoDB 也(yě)可用于(yú)多進程模式下的(de)臨時(shí)資源存儲,使各進程間資源可共享。

配置 MongoDB 存儲臨時(shí)資源的(de)方法爲(wéi / wèi):在(zài)系統配置文件中,開啓“基于(yú)MongoDB的(de)臨時(shí)資源存儲配置”,并注釋本地(dì / de)存儲配置。如下:

<!-- 基于(yú)MongoDB的(de)臨時(shí)資源存儲配置 -->
  <repository class="com.supermap.services.rest.repository.MongoDBObjSerializeRepoProvider" name="mongoRepository"> 
	<config class="com.supermap.services.rest.repository.MongoDBRepoSetting"> 
		<host>localhost</host>
		<port>27017</port>
		<dbName>SuperMap</dbName>
	</config> 
  </repository> 

在(zài)host參數中輸入您使用的(de)MongoDB的(de)服務地(dì / de)址,在(zài)port參數中輸入端口号,在(zài)dbName中輸入數據庫名稱(此處需要(yào / yāo)輸入已存在(zài)的(de)數據庫名稱)。如果使用的(de)MongoDB開啓了(le/liǎo)安全控制,通過添加<username>和(hé / huò)<password>參數,添加數據庫的(de)用戶名和(hé / huò)密碼。詳細參數設置可參考:MongoDBRepoSetting

使用 Redis 存儲臨時(shí)資源

SuperMap iServer 支持将臨時(shí)資源存儲在(zài) Redis 中,也(yě)支持将其用于(yú)多進程模式下的(de)臨時(shí)資源存儲,使各進程間資源可共享。配置 Redis 臨時(shí)資源存儲的(de)方法爲(wéi / wèi):在(zài) iserver-system.xml 文件中開啓“基于(yú) Redis 的(de)臨時(shí)資源存儲配置”,并注釋其他(tā)類型的(de)臨時(shí)資源存儲配置。

<!-- 基于(yú) Redis 的(de)臨時(shí)資源存儲配置 -->
<repository class="com.supermap.services.rest.repository.RedisRepoProvider">
    <config class="com.supermap.services.rest.repository.RedisRepoSetting">
      <type>Redis</type>  
      <host>192.168.17.116</host>  
      <port>6379</port>  
      <username>SuperMap</username>  
      <password>SuperMap</password> 
    </config>
</repository>

<host>:【必填】Redis 的(de)服務地(dì / de)址。

<port>:【必填】Redis 端口号,默認爲(wéi / wèi) 6379。

<username>:數據庫所有者的(de)用戶名。

<password>:該數據庫所有者的(de)密碼。

此外, 更多參數設置請參考:RedisRepoSetting

使用HSQLDB存儲臨時(shí)資源

在(zài)多進程模式下,當iServer系統配置文件中沒有臨時(shí)資源存儲配置,或設置的(de)臨時(shí)資源存儲配置(如本地(dì / de)存儲)不(bù)支持在(zài)多進程模式下使用時(shí),則默認使用HSQLDB存儲臨時(shí)資源。在(zài)單進程模式下,您也(yě)可以(yǐ)配置使用HSQLDB存儲,使同一(yī / yì /yí)台機器中的(de)多個(gè)iServer共享臨時(shí)資源。

配置HSQLDB存儲臨時(shí)資源的(de)方法爲(wéi / wèi):在(zài)系統配置文件中,開啓“基于(yú)HSQLDB的(de)臨時(shí)資源存儲配置”,并注釋本地(dì / de)存儲配置和(hé / huò)MongoDB存儲配置。如下:

<!-- 基于(yú)HSQLDB的(de)臨時(shí)資源存儲配置 -->
<repository class="com.supermap.services.rest.repository.HsqldbRepoProvider" name="localRepository"> 
                <config class="com.supermap.services.rest.repository.HsqldbRepoSetting"> 
                       <port>10070</port>  
                       <startServer>true</startServer> 
                </config> 
</repository> 

在(zài)<port>參數中填設置HSQLDB存儲端口号,默認爲(wéi / wèi)10070。<startServer>參數表示是(shì)否啓動HSQLDB。當一(yī / yì /yí)台機器中啓動了(le/liǎo)多個(gè)iServer時(shí),隻需在(zài)其中一(yī / yì /yí)個(gè)iServer中設置該參數,并将值設置爲(wéi / wèi)true。

注意:如果在(zài)配置文件中,同時(shí)設置了(le/liǎo)多種臨時(shí)資源存儲方式,則默認使用文件中的(de)第一(yī / yì /yí)種 。

使用 Caffeine 存儲臨時(shí)資源

iServer 支持将臨時(shí)資源存儲在(zài) Caffeine 中,Caffeine 是(shì)一(yī / yì /yí)種内存緩存。配置 Caffeine 臨時(shí)資源存儲的(de)方法爲(wéi / wèi):在(zài) iserver-system.xml 文件中開啓“基于(yú) Caffeine 的(de)臨時(shí)資源存儲配置”,并注釋其他(tā)類型的(de)臨時(shí)資源存儲配置。當完成以(yǐ)上(shàng)配置後啓動 iServer,Caffeine 緩存即可用。

<!-- 基于(yú) Caffeine 的(de)臨時(shí)資源存儲配置 -->
<repository class="com.supermap.services.rest.repository.CaffeineRepoProvider" name="localRepository"> 
                <repository class="com.supermap.services.rest.repository.CaffeineRepoProvider" name="localRepository"> 
                       <maximumSize>1000</maximumSize> 
                       <expireAfterAccess>3.0</expireAfterAccess> 
                </config> 
</repository> 

<maximumSize>:緩存的(de)最大(dà)對象數

<expireAfterAccess>:訪問後過期時(shí)間,即過一(yī / yì /yí)定時(shí)間後不(bù)訪問(讀取或者寫入),存儲的(de)數據會被銷毀,過期時(shí)間單位爲(wéi / wèi)小時(shí)。

使用 PostgreSQL、Kingbase、GaussDB、Vastbase存儲臨時(shí)資源

iServer 支持将臨時(shí)資源存儲在(zài) PostgreSQL 、Kingbase、GaussDB、Vastbase中,四者配置方法相同。

以(yǐ)PostgreSQL爲(wéi / wèi)例, PostgreSQL是(shì)一(yī / yì /yí)種内存緩存。配置 PostgreSQL 臨時(shí)資源存儲的(de)方法爲(wéi / wèi):在(zài) iserver-system.xml 文件中開啓“基于(yú) PostgreSQL 的(de)臨時(shí)資源存儲配置”,并注釋其他(tā)類型的(de)臨時(shí)資源存儲配置。以(yǐ)上(shàng)配置完成後 PostgreSQL 緩存即可用,無需啓動 iServer。

<!-- 基于(yú) PostgreSQL 的(de)臨時(shí)資源存儲配置 -->
<repository class="com.supermap.services.rest.repository.PostgresRepoProvider"> 
                <config class="com.supermap.services.rest.repository.PostgresRepoSetting"> 
                       <type>Postgres</type> 
                       <jdbcUrl>jdbc:postgresql://ip:port/dbname?currentSchema=public&amp;characterEncoding=utf8&amp;useSSL=false</jdbcUrl>
                       <username>username</username>
                       <password>yubokLIRWThaAAhkOXBtiw..</password> 
                       <cacheSize>21</cacheSize>
                       <expireTime>3</expireTime>
                       <deleteTimeSpan>2</deleteTimeSpan>
                       <autoCreateTable>true</autoCreateTable>
                </config> 
</repository> 

<type>:數據庫類型,使用 PostgreSQL 數據庫時(shí),這(zhè)裏填寫 Postgres。注:PostgreSQL、Kingbase、GaussDB、Vastbase數據庫在(zài) iserver-system.xml文件中僅<type>值不(bù)同,分别爲(wéi / wèi)Postgres、Kingbase、GaussDB、Vastbase。

<jdbcUrl>:數據庫的(de)連接信息。其中,ip 爲(wéi / wèi)數據庫的(de) ip 地(dì / de)址,port 爲(wéi / wèi)數據庫的(de)端口,dbname 爲(wéi / wèi)數據庫名稱,? 後面的(de)爲(wéi / wèi)數據庫的(de)一(yī / yì /yí)些參數信息。例如:jdbc:postgresql://127.0.0.1:5432/Testbase?currentSchema=public&amp;characterEncoding=utf8&amp;useSSL=false。

<cacheSize>:緩存個(gè)數,指在(zài)數據庫中最高支持存儲的(de)緩存數量,如不(bù)設置則使用默認值 100。當緩存數量達到(dào)上(shàng)限時(shí),将删除近期使用最少的(de)緩存記錄。

<expireTime>:資源過期時(shí)限,單位爲(wéi / wèi)分鍾。從該資源最後一(yī / yì /yí)次被使用起算,若持續未使用的(de)時(shí)長大(dà)于(yú)資源過期時(shí)限,則 iServer 将判斷該資源過期。

<deleteTimeSpan>:删除過期數據庫資源的(de)時(shí)間間隔,單位爲(wéi / wèi)分鍾。該操作的(de)起算時(shí)間爲(wéi / wèi)初次使用數據庫臨時(shí)資源存儲的(de)時(shí)間,每至設置的(de)間隔時(shí)間點,将删除過期的(de)資源。

設置存活時(shí)間阈值

臨時(shí)資源的(de)緩存不(bù)論存在(zài)于(yú)内存空間還是(shì)硬盤中,當超過一(yī / yì /yí)定存活時(shí)間時(shí),臨時(shí)資源緩存将直接被删除。

SuperMap iServer Java 6R(2012) SP1及以(yǐ)前的(de)版本中, 某些資源如 tempLayersSet、trackingLayer、queryResults 的(de)臨時(shí)子(zǐ)資源的(de)生命周期是(shì)通過 holdTime 參數來(lái)控制的(de),客戶端或用戶可以(yǐ)設置臨時(shí)資源的(de)存活時(shí)間,默認爲(wéi / wèi)15(分鍾)。

SuperMap iServer Java 6R(2012) SP2 及以(yǐ)後的(de)版本中,支持在(zài)服務配置文件(iserver-services-interfaces.xml)中設置接口配置參數 defaultHoldTime,用于(yú)設定臨時(shí)資源(如 tempLayersSet、trackingLayer、queryResults 等)默認保存時(shí)間,默認爲(wéi / wèi)7天,設置後對 REST 接口的(de)所有臨時(shí)資源的(de)存活時(shí)間都生效。 設置方法爲(wéi / wèi):

<interface class="com.supermap.services.rest.RestServlet" name="rest">
        <config class="com.supermap.services.rest.RestConfig">
                <accessControlAllowOrigin>*</accessControlAllowOrigin>
                <!--  rest 資源默認保存時(shí)間,單位是(shì)分鍾-->
                <defaultHoldTime>10080</defaultHoldTime>
        </config>
</interface>
<interface class="com.supermap.services.rest.JaxrsServletForJersey" name="restjsr">
        <config class="com.supermap.services.rest.JaxrsConfigForJersey">
                <accessControlAllowOrigin>*</accessControlAllowOrigin>
                <!--  rest 資源默認保存時(shí)間,單位是(shì)分鍾-->
                <defaultHoldTime>10080</defaultHoldTime>
        </config>
</interface>

臨時(shí)資源列表

所有 POST 請求創建的(de)資源都爲(wéi / wèi)臨時(shí)資源,具體資源示例如下:

模塊 臨時(shí)資源 說(shuō)明
map queryResult queryResults 資源 POST 操作結果。
tempLayers tempLayersSet 資源 POST 操作結果。
tempLayer tempLayersSet 資源 POST 操作結果。
highlightTargetSet trackingLayer 資源 POST 操作結果。
data featureResult featureResults 資源 POST 操作結果。
coordtransferResult coordTransfer資源 POST 操作結果。
spatialAnalyst datasetBufferResult datasetBufferResults 資源 POST 操作結果。
datasetOverlayResult datasetOverlayResults 資源 POST 操作結果。
datasetIsolineResult datasetIsolineResults 資源 POST 操作結果。
datasetIsoregionResult datasetIsoregionResults 資源 POST 操作結果。
interpolationIDWResult interpolationIDW 資源 POST 操作結果。
interpolationDensityResult interpolationDensity 資源 POST 操作結果。
interpolationRBFResult interpolationRBF 資源 POST 操作結果。
interpolationKrigingResult interpolationKriging 資源 POST 操作結果。
spatialDataResult generateSpatialData 資源 POST 操作結果。
datasetGeorelationResult datasetGeorelationResults 資源 POST 操作結果。
datasetThiessenPolygenResult datasetThiessenPolygenResults 資源 POST 操作結果。
geometryBufferResult geometryBufferResults 資源 POST 操作結果。
geometryOverlayResult geometryOverlayResults 資源 POST 操作結果。
geometryIsolineResult geometryIsolineResults 資源 POST 操作結果。
geometryIsoregionResult geometryIsoregionResults 資源 POST 操作結果。