當前位置:首頁 » 硬碟大全 » 海量活動數據緩存
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

海量活動數據緩存

發布時間: 2023-02-10 00:17:49

1. 求解:什麼是高速緩存以及緩沖的原理是什麼

——》1,高速緩存(Cache),全稱「高速緩沖存儲器」。

——》2,例如:當CPU處理數據時,它會先到高速緩存中去尋找,如果數據因之前的操作已經讀取而被暫存其中,就不需要再從主內存中讀取數據——由於CPU的運行速度一般比主內存快,因此若要經常存取主內存的話,就必須等待數個CPU周期從而造成浪費。

——》3,提供「高速緩存」的目的是為了讓數據存取的速度適應CPU的處理速度,其基於的原理是內存中「程序執行與數據訪問的局域性行為」。

——》4,現在Cache的概念已經被擴充了:不僅在CPU和主內存之間有Cache,而且在內存和硬碟之間也有Cache(磁碟高速緩存),乃至在硬碟與網路之間也有某種意義上的「Cache」(Internet臨時文件夾)。

——》5,凡是位於速度相差較大的兩種硬體之間的,用於協調兩者數據傳輸速度差異的結構,均可稱之為Cache。

——》6,所以硬碟和內存之間的Cache就叫做磁碟高速緩存。它是在內存中開辟一塊位置,來臨時存取硬碟中的數據。這項技術可使計算機讀寫時的存儲系統平均數據傳輸率提高5-10倍,適應了當前激增的海量數據存儲需求。

——》7,在DOS時代,我們用:
smartdrv 內存容量
命令來載入硬碟高速緩存。自從有了Windows後,我們就不需要載入硬碟高速緩存了,因為Windows本身有自己的高速緩存管理單元,如果強行使用smartdrv命令載入,反而會影響Windows的性能。

——》8,我們在用硬碟安裝Win2000/XP時候,系統會提示載入高速緩存,這是因為在安裝的初期還是DOS操作,所以為了達到讀存的速度,安裝程序要求載入高速緩存。

2. 大數據高並發系統架構實戰方案(LVS負載均衡、Nginx、共享存儲、海量數據、隊列緩存)

去51cto網上博客搜索看吧,也有很多類似的書籍

3. 單片機怎麼處理海量數據 不要程序回答 我大概知道就是要多路採集 中間有個緩存

用擴充RAM作緩存,,,數據量不大,就用EEPROM作掉電保存,,很大的就用U盤或硬碟作外存.

4. 為什麼CPU要分一級緩存、二級緩存和三級緩存

CPU緩存就是CPU內部的緩存運行頻率,緩存的大小與結構對CPU速度的影響較大,因此緩存大小也是CPU重要的性能指標之一。

CPU緩存的作用主要是為了解決CPU運算速度與內存讀寫速度不匹配的矛盾,而緩存的容量要比內存要小的太多,但是其速度要比內存快的多,因此這樣會讓CPU使用很長的時間等待數據到來或把數據寫入內存中。

搜索在緩存中的數據是內存中的一小部分,但這一小部分是短時間內CPU即將訪問的,當CPU調用大量數據時,就能夠避開內存直接從緩存中調用,從而加快讀取速度。

當CPU需要讀取數據並進行計算時,首先需要將CPU緩存中查到所需的數據,並在最短的時間下交付給CPU。

如果沒有查到所需的數據,CPU就會提出「要求」經過緩存從內存中讀取,再原路返回至CPU進行計算。而同時,把這個數據所在的數據也調入緩存,可以使得以後對整塊數據的讀取都從緩存中進行,不必再調用內存。

一級緩存(L1 Cache)

CPU一級緩存,就是指CPU的第一層級的高速緩存,主要當擔的工作是緩存指令和緩存數據。一級緩存的容量與結構對CPU性能影響十分大,但是由於它的結構比較復雜,又考慮到成本等因素,一般來說,CPU的一級緩存較小,通常CPU的一級緩存也就能做到256KB左右的水平。

二級緩存(L2 Cache66)

CPU二級緩存,就是指CPU的第二層級的高速緩存,而二級緩存的容量會直接影響到CPU的性能,二級緩存的容量越大越好。例如intel的第八代i7-8700處理器,共有六個核心數量,而每個核心都擁有256KB的二級緩存,屬於各核心獨享,這樣二級緩存總數就達到了1.5MB。

三級緩存(L3 Cache)

CPU三級緩存,就是指CPU的第三層級的高速緩存,其作用是進一步降低內存的延遲,同時提升海量數據量計算時的性能。和一級緩存、二級緩存不同的是,三級緩存是核心共享的,能夠將容量做的很大。

CPU的核心數量、高頻高低都會影響性能,但如果讓CPU更聰明、更有效率的執行計算任務,那麼緩存的作用就至關重要了。

(4)海量活動數據緩存擴展閱讀:

CPU主要性能參數:

1、主頻

主頻也叫時鍾頻率,單位是兆赫(MHz)或千兆赫(GHz),用來表示CPU的運算、處理數據的速度。

2、外頻

外頻是CPU的基準頻率,單位是MHz。CPU的外頻決定著整塊主板的運行速度。

3、匯流排頻率

前端匯流排(FSB)是將CPU連接到北橋晶元的匯流排。前端匯流排(FSB)頻率(即匯流排頻率)是直接影響CPU與內存直接數據交換速度。

4、倍頻系數

倍頻系數是指CPU主頻與外頻之間的相對比例關系。

5、緩存

緩存大小也是CPU的重要指標之一,而且緩存的結構和大小對CPU速度的影響非常大,CPU內緩存的運行頻率極高,一般是和處理器同頻運作,工作效率遠遠大於系統內存和硬碟。

5. 如何處理海量數據

在實際的工作環境下,許多人會遇到海量數據這個復雜而艱巨的問題,它的主要難點有以下幾個方面:
一、數據量過大,數據中什麼情況都可能存在。
如果說有10條數據,那麼大不了每條去逐一檢查,人為處理,如果有上百條數據,也可以考慮,如果數據上到千萬級別,甚至 過億,那不是手工能解決的了,必須通過工具或者程序進行處理,尤其海量的數據中,什麼情況都可能存在,例如,數據中某處格式出了問題,尤其在程序處理時, 前面還能正常處理,突然到了某個地方問題出現了,程序終止了。
二、軟硬體要求高,系統資源佔用率高。
對海量的數據進行處理,除了好的方法,最重要的就是合理使用工具,合理分配系統資源。一般情況,如果處理的數據過TB級,小型機是要考慮的,普通的機子如果有好的方法可以考慮,不過也必須加大CPU和內存,就象面對著千軍萬馬,光有勇氣沒有一兵一卒是很難取勝的。
三、要求很高的處理方法和技巧。
這也是本文的寫作目的所在,好的處理方法是一位工程師長期工作經驗的積累,也是個人的經驗的總結。沒有通用的處理方法,但有通用的原理和規則。
下面我們來詳細介紹一下處理海量數據的經驗和技巧:
一、選用優秀的資料庫工具
現在的資料庫工具廠家比較多,對海量數據的處理對所使用的資料庫工具要求比較高,一般使用Oracle或者DB2,微軟 公司最近發布的sql Server 2005性能也不錯。另外在BI領域:資料庫,數據倉庫,多維資料庫,數據挖掘等相關工具也要進行選擇,象好的ETL工具和好的OLAP工具都十分必要, 例如Informatic,Eassbase等。筆者在實際數據分析項目中,對每天6000萬條的日誌數據進行處理,使用SQL Server 2000需要花費6小時,而使用SQL Server 2005則只需要花費3小時。
二、編寫優良的程序代碼
處理數據離不開優秀的程序代碼,尤其在進行復雜數據處理時,必須使用程序。好的程序代碼對數據的處理至關重要,這不僅僅是數據處理准確度的問題,更是數據處理效率的問題。良好的程序代碼應該包含好的演算法,包含好的處理流程,包含好的效率,包含好的異常處理機制等。
三、對海量數據進行分區操作
對海量數據進行分區操作十分必要,例如針對按年份存取的數據,我們可以按年進行分區,不同的資料庫有不同的分區方式,不 過處理機制大體相同。例如SQL Server的資料庫分區是將不同的數據存於不同的文件組下,而不同的文件組存於不同的磁碟分區下,這樣將數據分散開,減小磁碟I/O,減小了系統負荷, 而且還可以將日誌,索引等放於不同的分區下。
四、建立廣泛的索引
對海量的數據處理,對大表建立索引是必行的,建立索引要考慮到具體情況,例如針對大表的分組、排序等欄位,都要建立相應 索引,一般還可以建立復合索引,對經常插入的表則建立索引時要小心,筆者在處理數據時,曾經在一個ETL流程中,當插入表時,首先刪除索引,然後插入完 畢,建立索引,並實施聚合操作,聚合完成後,再次插入前還是刪除索引,所以索引要用到好的時機,索引的填充因子和聚集、非聚集索引都要考慮。
五、建立緩存機制
當數據量增加時,一般的處理工具都要考慮到緩存問題。緩存大小設置的好差也關繫到數據處理的成敗,例如,筆者在處理2億條數據聚合操作時,緩存設置為100000條/Buffer,這對於這個級別的數據量是可行的。
六、加大虛擬內存
如果系統資源有限,內存提示不足,則可以靠增加虛擬內存來解決。筆者在實際項目中曾經遇到針對18億條的數據進行處理, 內存為1GB,1個P42.4G的CPU,對這么大的數據量進行聚合操作是有問題的,提示內存不足,那麼採用了加大虛擬內存的方法來解決,在6塊磁碟分區 上分別建立了6個4096M的磁碟分區,用於虛擬內存,這樣虛擬的內存則增加為 4096*6 + 1024 =25600 M,解決了數據處理中的內存不足問題。
七、分批處理
海量數據處理難因為數據量大,那麼解決海量數據處理難的問題其中一個技巧是減少數據量。可以對海量數據分批處理,然後處 理後的數據再進行合並操作,這樣逐個擊破,有利於小數據量的處理,不至於面對大數據量帶來的問題,不過這種方法也要因時因勢進行,如果不允許拆分數據,還 需要另想辦法。不過一般的數據按天、按月、按年等存儲的,都可以採用先分後合的方法,對數據進行分開處理。
八、使用臨時表和中間表
數據量增加時,處理中要考慮提前匯總。這樣做的目的是化整為零,大表變小表,分塊處理完成後,再利用一定的規則進行合 並,處理過程中的臨時表的使用和中間結果的保存都非常重要,如果對於超海量的數據,大表處理不了,只能拆分為多個小表。如果處理過程中需要多步匯總操作, 可按匯總步驟一步步來,不要一條語句完成,一口氣吃掉一個胖子。
九、優化查詢SQL語句
在對海量數據進行查詢處理過程中,查詢的SQL語句的性能對查詢效率的影響是非常大的,編寫高效優良的SQL腳本和存儲 過程是資料庫工作人員的職責,也是檢驗資料庫工作人員水平的一個標准,在對SQL語句的編寫過程中,例如減少關聯,少用或不用游標,設計好高效的資料庫表 結構等都十分必要。筆者在工作中試著對1億行的數據使用游標,運行3個小時沒有出結果,這是一定要改用程序處理了。
十、使用文本格式進行處理
對一般的數據處理可以使用資料庫,如果對復雜的數據處理,必須藉助程序,那麼在程序操作資料庫和程序操作文本之間選擇, 是一定要選擇程序操作文本的,原因為:程序操作文本速度快;對文本進行處理不容易出錯;文本的存儲不受限制等。例如一般的海量的網路日誌都是文本格式或者 csv格式(文本格式),對它進行處理牽扯到數據清洗,是要利用程序進行處理的,而不建議導入資料庫再做清洗。
十一、定製強大的清洗規則和出錯處理機制
海量數據中存在著不一致性,極有可能出現某處的瑕疵。例如,同樣的數據中的時間欄位,有的可能為非標準的時間,出現的原因可能為應用程序的錯誤,系統的錯誤等,這是在進行數據處理時,必須制定強大的數據清洗規則和出錯處理機制。
十二、建立視圖或者物化視圖
視圖中的數據來源於基表,對海量數據的處理,可以將數據按一定的規則分散到各個基表中,查詢或處理過程中可以基於視圖進行,這樣分散了磁碟I/O,正如10根繩子吊著一根柱子和一根吊著一根柱子的區別。
十三、避免使用32位機子(極端情況)
目前的計算機很多都是32位的,那麼編寫的程序對內存的需要便受限制,而很多的海量數據處理是必須大量消耗內存的,這便要求更好性能的機子,其中對位數的限制也十分重要。
十四、考慮操作系統問題
海量數據處理過程中,除了對資料庫,處理程序等要求比較高以外,對操作系統的要求也放到了重要的位置,一般是必須使用伺服器的,而且對系統的安全性和穩定性等要求也比較高。尤其對操作系統自身的緩存機制,臨時空間的處理等問題都需要綜合考慮。
十五、使用數據倉庫和多維資料庫存儲
數據量加大是一定要考慮OLAP的,傳統的報表可能5、6個小時出來結果,而基於Cube的查詢可能只需要幾分鍾,因此處理海量數據的利器是OLAP多維分析,即建立數據倉庫,建立多維數據集,基於多維數據集進行報表展現和數據挖掘等。
十六、使用采樣數據,進行數據挖掘
基於海量數據的數據挖掘正在逐步興起,面對著超海量的數據,一般的挖掘軟體或演算法往往採用數據抽樣的方式進行處理,這樣 的誤差不會很高,大大提高了處理效率和處理的成功率。一般采樣時要注意數據的完整性和,防止過大的偏差。筆者曾經對1億2千萬行的表數據進行采樣,抽取出 400萬行,經測試軟體測試處理的誤差為千分之五,客戶可以接受。
還有一些方法,需要在不同的情況和場合下運用,例如使用代理鍵等操作,這樣的好處是加快了聚合時間,因為對數值型的聚合比對字元型的聚合快得多。類似的情況需要針對不同的需求進行處理。
海量數據是發展趨勢,對數據分析和挖掘也越來越重要,從海量數據中提取有用信息重要而緊迫,這便要求處理要准確,精度要高,而且處理時間要短,得到有價值信息要快,所以,對海量數據的研究很有前途,也很值得進行廣泛深入的研究。

6. 如何在海量的數據中取前面100條

<%
'分頁sql語句生成代碼
Function GetPageSql(TblName,FldName,PageSize,PageIndex,OrderType,StrWhere)
Dim StrTemp,StrSql,StrOrder
'根據排序方式生成相關代碼
If OrderType = 0 Then
StrTemp = "> (Select Max([" & FldName & "])"
StrOrder = " Order By [" & FldName & "] Asc"
Else
StrTemp = "< (Select Min([" & FldName & "])"
StrOrder = " Order By [" & FldName & "] Desc"
End If

'若是第1頁則無須復雜的語句
If PageIndex = 1 Then
StrTemp = ""
If StrWhere <> "" Then
Strtmp = " Where " & StrWhere
End If
StrSql = "Select Top " & PageSize & " * From [" & TblName & "]" & Strtmp & StrOrder
Else '若不是第1頁,構造sql語句
StrSql = "Select Top " & PageSize & " * From [" & TblName & "] Where [" & FldName & "]" & StrTemp & _
" From (Select Top " & (PageIndex-1) * PageSize & " [" & FldName & "] From [" & TblName & "]"
If StrWhere <> "" Then
StrSql = StrSql & " Where " & StrWhere
End If
StrSql = StrSql & StrOrder & ") As Tbltemp)"
If StrWhere <> "" Then
StrSql = StrSql & " And " & StrWhere
End If
StrSql = StrSql & StrOrder
End If
GetPageSql = StrSql '返回sql語句
End Function
%>
分頁讀取數據,只讀取需要顯示的數據
如果你用的SQL資料庫,用存儲過程,需要的話帖上來

除了程序上有要求,需要將WEB伺服器和資料庫伺服器分開

或者把經常使用的數據緩存在內存中,比如使用8GB內存的伺服器,將資料庫數據全部緩存進去
還有很多技術要加在一起,呵呵

7. 高性能高並發網站架構,教你搭建Redis5緩存集群

一、Redis集群介紹

Redis真的是一個優秀的技術,它是一種key-value形式的NoSQL內存資料庫,由ANSI C編寫,遵守BSD協議、支持網路、可基於內存亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。 Redis最大的特性是它會將所有數據都放在內存中,所以讀寫速度性能非常好。Redis是基於內存進行操作的,性能較高,可以很好的在一定程度上解決網站一瞬間的並發量,例如商品搶購秒殺等活動。

網站承受高並發訪問壓力的同時,還需要從海量數據中查詢出滿足條件的數據,需要快速響應,前端發送請求、後端和mysql資料庫交互,進行sql查詢操作,讀寫比較慢,這時候引入Redis ,把從mysql 的數據緩存到Redis 中,下次讀取時候性能就會提高;當然,它也支持將內存中的數據以快照和日誌的形式持久化到硬碟,這樣即使在斷電、機器故障等異常情況發生時數據也不會丟失,Redis能從硬碟中恢復快照數據到內存中。

Redis 發布了穩定版本的 5.0 版本,放棄 Ruby的集群方式,改用 C語言編寫的 redis-cli的方式,是集群的構建方式復雜度大大降低。Redis-Cluster集群採用無中心結構,每個節點保存數據和整個集群狀態,每個節點都和其他所有節點連接。

為了保證數據的高可用性,加入了主從模式,一個主節點對應一個或多個從節點,主節點提供數據存取,從節點則是從主節點拉取數據備份,當這個主節點掛掉後,就會有這個從節點選取一個來充當主節點,從而保證集群不會掛掉。

redis-cluster投票:容錯,投票過程是集群中所有master參與,如果半數以上master節點與master節點通信超過(cluster-node-timeout),認為當前master節點掛掉。

集群中至少應該有奇數個節點,所以至少有三個節點,每個節點至少有一個備份節點,所以下面使用6節點(主節點、備份節點由redis-cluster集群確定)。6個節點分布在一台機器上,採用三主三從的模式。實際應用中,最好用多台機器,比如說6個節點分布到3台機器上,redis在建立集群時為自動的將主從節點進行不同機器的分配。

二、單機redis模式

下載源碼redis5.0並解壓編譯

wget http://download.redis.io/releases/redis-5.0.0.tar.gz

tar xzf redis-5.0.0.tar.gz

cd redis-5.0.0

make

redis前端啟動需要改成後台啟動.

修改redis.conf文件,將daemonize no -> daemonize yes

vim redis.conf

啟動redis

/www/server/redis/src/redis-server /www/server/redis/redis.conf

查看redis是否在運行

ps aux|grep redis

現在是單機redis模式完成。

三、redis集群模式:

1.創建6個Redis配置文件

cd /usr/local/

mkdir redis_cluster //創建集群目錄

cd redis_cluster

mkdir 7000 7001 7002 7003 7004 7005//分別代表6個節點

其對應埠 7000 7001 7002 70037004 7005

2.復制配置文件到各個目錄

cp /www/server/redis/redis.conf /usr/local/redis_cluster/7000/

cp /www/server/redis/redis.conf /usr/local/redis_cluster/7001/

cp /www/server/redis/redis.conf /usr/local/redis_cluster/7002/

cp /www/server/redis/redis.conf /usr/local/redis_cluster/7003/

cp /www/server/redis/redis.conf /usr/local/redis_cluster/7004/

cp /www/server/redis/redis.conf /usr/local/redis_cluster/7005/

3.分別修改配置文件

vim /usr/local/redis_cluster/7000/redis.conf

vim /usr/local/redis_cluster/7001/redis.conf

vim /usr/local/redis_cluster/7002/redis.conf

vim /usr/local/redis_cluster/7003/redis.conf

vim /usr/local/redis_cluster/7004/redis.conf

vim /usr/local/redis_cluster/7005/redis.conf

如下

port 7000 #埠

cluster-enabled yes #啟用集群模式

cluster-config-file nodes_7000.conf #集群的配置 配置文件首次啟動自動生成

cluster-node-timeout 5000 #超時時間 5秒

appendonly yes #aof日誌開啟 它會每次寫操作都記錄一條日誌

daemonize yes #後台運行

protected-mode no #非保護模式

pidfile /var/run/redis_7000.pid

//下面可以不寫

#若設置密碼,master和slave需同時配置下面兩個參數:

masterauth "jijiji" #連接master的密碼

requirepass "jijiji" #自己的密碼

cluster-config-file,port,pidfile對應數字

4.啟動節點

cd /www/server/redis/src/

./redis-server /usr/local/redis_cluster/7000/redis.conf

./redis-server /usr/local/redis_cluster/7001/redis.conf

./redis-server /usr/local/redis_cluster/7002/redis.conf

./redis-server /usr/local/redis_cluster/7003/redis.conf

./redis-server /usr/local/redis_cluster/7004/redis.conf

./redis-server /usr/local/redis_cluster/7005/redis.conf

查看redis運行

ps aux|grep redis

5.啟動集群

/www/server/redis/src/redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1

這里使用的命令是create,因為我們要創建一個新的集群。 該選項--cluster-replicas 1意味著我們希望每個創建的主伺服器都有一個從服。

輸入yes

至此,Reids5 集群搭建完成。

6.檢查Reids5集群狀態

可以執行redis-cli --cluster check host:port檢查集群狀態slots詳細分配。

redis-cli --cluster info 127.0.0.1:7000

7.停止Reids5集群

(1).因為Redis可以妥善處理SIGTERM信號,所以直接kill -9也是可以的,可以同時kill多個,然後再依次啟動。

kill -9 PID PID PID

(2).redis5 提供了關閉集群的工具,修改文件: /www/server/redis/utils/create-cluster/create-cluster

埠PROT設置為6999,NODES為6,工具會生成 7000-7005 六個節點 用於操作。

修改後,執行如下命令關閉集群:

/www/server/redis/utils/create-cluster/create-cluster stop

重新啟動集群:

/www/server/redis/utils/create-cluster/create-cluster start

8.幫助信息

執行redis-cli --cluster help,查看更多幫助信息

redis-cli --cluster help

吉海波

8. 地圖緩存使用指南

地圖緩存是快速訪問地圖服務的有效方式。目前流行在線地圖服務,如 Google Maps,MapBar,BingMaps 等,對瀏覽速度和並發性要求都比較高,均採用緩存地圖的方式滿足快速訪問地圖的需求。

什麼是地圖緩存?

作為一種改善地圖瀏覽用戶體驗的優化策略,地圖緩存實際上是包含了一系列比例尺一定地圖范圍內的地圖切片文件。在服務端創建地圖緩存之後,客戶端的地圖操作,比如放大、縮小和平移,都會向服務端發送一個 URL 請求,此時,服務端按照請求返回預先生成的地圖切片,從而達到降低伺服器負擔並快速顯示地圖,提升地圖瀏覽速度。

為什麼使用地圖緩存?

使用地圖緩存時,只需要付出一次生成緩存的代價,就可以提供給客戶端地圖顯示以快速的響應速度。地圖緩存是以一系列不同比例尺下地圖圖片形式提供的,因此不受普通地圖顯示上的約束,比如地圖信息量的大小、地物的復雜程度、是否帶有標注、所使用的地圖符號等的限制。因為,一般情況下,地圖渲染的細節越多,承載的信息量越豐富,同等環境下,繪制矢量地圖就越慢,但使用了地圖緩存,客戶端在獲得了同樣顯示效果的同時,等待時間卻大大縮短。特別是對海量數據,使用緩存可以極大地提高瀏覽速度,加速地圖響應時間,最終提升用戶體驗。

SuperMap產品針對海量數據,在保證客戶端高效訪問的前提下,提供了一套完備的二三維緩存體系。SuperMap iDesktop 8C 桌面產品支持生成影像緩存、地形緩存、矢量緩存、模型緩存、地圖緩存,還可以對場景直接生成場景緩存。生成的緩存數據可以有多種方式在地圖窗口或者場景窗口中載入,也可以部署到服務端進行發布,方便客戶端進行瀏覽。

為了幫助用戶深入了解SuperMap 的地圖緩存技術、有效使用 SuperMap 產品生成和發布地圖緩存等,本專題文檔就地圖緩存的相關內容進行闡述。

1. 地圖緩存的目錄結構

地圖緩存根據緩存版本的不同,生成的緩存目錄的層次結構有所不同。SuperMap iDesktop 7C 桌面應用程序目前支持六種不同版本的地圖緩存。

地圖緩存的目錄結構主要採用 iServer6R,iServer 2.0和 IS .NET 三種緩存策略,按照不同比例尺級別進行分層,都是從指定范圍的左上角為起點進行分塊。其中2.0,2.1版本的地圖緩存均採用 IS .NET 緩存策略,3.0,3.1版本的地圖緩存均採用 iServer 2.0 緩存策略,4.0和5.0版本的緩存採用 iServer 6R 緩存策略。

下面就這三種緩存版本的目錄結構做詳細的介紹。

1.1. iServer 6R 緩存目錄結構說明

iServer 6R 是針對 UGC(UniversalGIS Class)系列產品的緩存策略。UGC 系列產品包括桌面產品 SuperMap iDesktop 7C,組件式二次開發平台 SuperMap Objects Java/.NET 6R 以及伺服器產品 SuperMapiServer 6R 系列產品。

iServer 6R 緩存策略生成的地圖緩存目錄共分為六個層次,如下圖所示:

圖:iServer 6R 緩存目錄結構說明

第一層:緩存根目錄,用來保存不同緩存文件。緩存根目錄名稱可以為任意名稱。在生成緩存時,通過輸入緩存名稱來指定。

第二層:地圖緩存目錄。默認名稱格式為:MapName_Width×Height。其中MapName

是地圖名稱,Width 和 Height 是16進制的圖片寬高,例如,目錄為世界地圖_Day_100×100,表示地圖緩存的圖片大小為256像素×256像素。

第三層:不同比例尺級別緩存目錄。分層目錄名稱為設置的比例尺大小。如15625000文件夾下保存的是比例尺為15625000時的所有地圖切片文件。

第四層:不同空間區域行號緩存目錄。目錄名稱以空間區域(緩存范圍)行號命名。所謂空間區域指的是將地圖按照網格分塊演算法將一幅地圖分為多個塊,每一個分塊表示一個空間區域。每個空間區域的寬高都是緩存塊的整數倍。區域內至少有一張圖片,行號就是空間區域在指定范圍內的行數,行號從上到下逐漸增大,用十進製表示。范圍擴大時行號可以是負值。

第五層:不同空間區域列號緩存目錄。目錄名稱以空間區域(緩存范圍)列號命名。列號就是空間區域在指定范圍內的列數,列號從左到右逐漸增大,用十進製表示。范圍擴大時列號可以是負值。

第六層:緩存圖片文件名稱。其格式為:RowxCol_MapHashCode.postfix。其中 Row 表示緩存圖片按緩存塊劃分的行號索引,Col 表示緩存圖片按緩存分塊劃分的列號索引,Row 和 Col 都可以是負數。MapHashCode 表示當前比例尺下地圖的16位 HashCode 值,postfix 是緩存圖片文件的擴展名。如上圖中的名稱為 0000×0001_108F8B08FIX.png 的圖片,0000為行號,0001為列號,108F8B08FIX 為16位的 HashCode,png 為圖片的擴展名。

1.2. IS .NET 緩存目錄結構說明

IS .NET 緩存策略是SuperMap 最早使用的緩存策略,也是通過分層分塊生成切片文件(影像)的思路進行緩存構建,並且從坐標系、地圖、圖層風格以及數據范圍等方面考慮了緩存更新問題。它主要是 SFC(SuperMap Foundation Class)系列產品採用的緩存策略。

IS .NET 緩存策略生成的二維地圖緩存目錄共分為五個層次,如下圖所示:

第一層:緩存根目錄,用來保存不同緩存文件。緩存根目錄名稱可以為任意名稱。在生成緩存時,通過輸入緩存名稱指定。

第二層:地圖緩存目錄。默認名稱格式為:MapName_Width×Height。其中 MapName 是地圖名稱,Width 和 Height 是16進制的圖片寬高,例如,目錄為世界地圖_Day_100×100,表示地圖緩存的圖片大小為256像素×256像素。

第三層:不同比例尺級別緩存目錄。分層目錄名稱為設置的比例尺大小。如15625000文件夾下保存的是比例尺為15625000時的地圖切片文件。

第四層:圖片索引目錄。按照網格分塊演算法將某一比例尺下的地圖切割成多個圖幅,每一個圖幅在整個地圖中都有一個索引值對應,形為:X×Y。X,Y 分別表示圖幅在地圖分塊隊列中的列號和行號。

第五層:緩存圖片文件名稱。其格式為:centerIndex_MapHashCode.postfix,其中centerIndex 表示緩存圖片的中心點索引,MapHashCode 表示當前比例尺下地圖的 HashCode 值,postfix 是緩存圖片文件的擴展名。如上圖所示,名稱為332×7361_108F8BFIX.png 的圖片,(332,7361)表示圖片中心點的索引值,108F8BFIX 為當前比例尺下地圖的 HashCode 值,png 為圖片的後綴名。

1.3. iServer 2.0 緩存目錄結構說明

iServer 2.0 緩存策略與 IS .NET緩存策略相似,是 SuperMap iServer 2.0 產品的緩存策略。iServer 2.0 緩存策略生成的二維地圖緩存目錄共分為五個層次,如下圖所示:

圖:iServer 2.0緩存目錄結構說明

第一層:緩存根目錄,用來保存不同緩存文件。緩存根目錄名稱可以為任意名稱。在生成緩存時,通過輸入緩存名稱指定。

第二層:地圖緩存目錄,文件夾名稱格式為:MapName_Width×Height,其中 Width×Height 按照10進制計算,即目錄名稱為:地圖名稱_圖片的實際寬×高。

第三層:不同比例尺級別緩存目錄。分層目錄名稱為設置的比例尺大小。如15625000文件夾下保存的是比例尺為15625000時的地圖切片文件。

第四層:緩存圖片索引目錄({Index_x})。將地圖分塊之後,對每一個圖片分別建立索引號。對每一副地圖,按照要生成的緩存圖片大小生成 M×N 個圖片,每一列為 Index_x,x 的值從 0 到 N-1,每一行為 Index_y,y 的值從 0 到 M-1。在這一層,目錄名為每一列的索引名,即 Index_x,表示每一列圖片緩存的目錄。

第五層:緩存圖片文件名稱。其格式為:Index_y.postfix的值。如上圖中選中的文件夾,文件夾5表示 X 索引號(Index_x)為5 ,圖片名稱15表示 Y 索引號(Index_y)為15,則此圖片位於地圖目錄的第5行第15列。

2. 地圖緩存存儲類型

SuperMap 緩存有兩種存儲類型,即原始型與緊湊型。

2.1. 原始型

當緩存儲存類型為原始型,切片文件以單獨的圖片文件格式存放在磁碟上,不對數據進行壓縮,能夠直接讀取。地圖緩存數據直觀地表現為多個文件夾下的原始圖片。

原始型存儲方式具有以下特點:

l 可以直接讀取,比較直觀。

l 佔用磁碟空間大,不太易於管理,拷貝和遷移不太方便。

l 對密級較高的數據,不能設置密碼。

2.2. 緊湊型

當緩存儲存類型為緊湊型時,對原始的切片文件採用一定的壓縮和加密機制,在結構上採用一組文件替代原始的圖片格式的緩存機制。此時,不同比例尺文件夾下的緩存數據將表現為一組文件,該組文件包括兩個部分:索引文件(.sc)、一組數據文件(.sc00和*.lock)。如下圖所示,為世界地圖_Day 生成的緊湊型緩存文件。

其中,索引文件為 *.sc(SuperMapCache File)格式;數據文件為 *.scXX(SuperMap Caceh File Data)格式,這里的 XX 不是兩個字母,是兩個16進制數字(00~FF)。目前只支持兩位16進制數,所以最多支持256個數據文件。數據文件的個數由緩存數據的大小決定,一個數據文件最大為2G。

與原始型相比,緊湊型存儲方式具有以下優勢:

3. 使用地圖緩存的建議

為了更高效的生成地圖緩存,可以從以下幾個方面考慮:

3.1. 選擇合適的比例尺系列

為了充分利用緩存數據,同時實現多級縮放,可以對地圖設置多個比例尺。多設置一些比例尺級別,可以在瀏覽過程中比較順暢,不會出現比較大的跳躍。在地圖製作的過程中要考慮要素在不同的比例尺下是否需要顯示。比如在1:100000的比例尺下,河流是線狀的,在1:10000的比例尺下,可能需要講河流顯示為面狀的。在小比例尺下,一些注記不需要顯示,但隨著比例尺的擴大,注記可能需要顯示。這種情況下,需要考慮合適的比例尺級別了。

3.2. 緩存路徑設置

如果生成的緩存要在 SuperMapiServer Java 6R 服務端發布,可以直接將 SuperMap iDesktop 7C 桌面緩存路徑設置為 SueprMap iServer Java 6R 的出圖路徑下,即 %SuperMapiServer Java_HOME%webappsiserveroutputcache,否則緩存切片拷貝可能會花費比較長的時間。

3.3. 適當的製作地圖

製作地圖的過程中,可以考慮對線型或者文本對象使用反走樣,對過小的對象進行過濾。

對地圖中的過小對象使用過濾條件進行過濾,可以在不影響地圖所承載的信息量的情況下,將提升地圖瀏覽速度。

進行反走樣後矢量地圖中的線型和文本看起來更光滑,提高視覺感受,但會造成性能下降。因此在使用反走樣時,需要瀏覽速度和性能之間尋找一種平衡,既要達到瀏覽效果最佳,也要保證瀏覽速度。

對比較復雜的地圖,要避免對象節點過多,可以考慮進行光滑處理或者重采樣。

3.4. 保持工作空間一致

工作空間中的地圖參數決定了SuperMap iServer Java 使用的緩存文件中緩存圖片的命名,因此需要保證用於製作緩存的工作空間中的地圖和用於 SuperMap iServer Java 發布的工作空間中的地圖一致。影響參數包括地圖的風格、數據的連接情況、圖層順序、默認比例尺、地圖范圍等。因此製作完成緩存後,盡量不要對工作空間的地圖進行修改,以保證發布的地圖與用於製作緩存的地圖一致。

同時需要保持地圖中所有地圖可用,所有圖層對應的數據集合數據源在工作空間中都存在,不能有無對應數據源和數據集的空連接圖層。對數據集中對象的編輯,如添加、刪除、更新等,不會影響編輯區域以外的緩存圖片(如果需要的話,只需更通過 SuperMap iServer 更新這部分區域的緩存即可)。

3.5. 合理設置地圖緩存范圍和索引范圍

可以為頻繁訪問的地圖區域生成緩存,以降低生成和存儲緩存的成本。例如,在訪問世界地圖時,對於廣大的無人區,可以不生成緩存。

用 SuperMap iDesktop7C 生成地圖緩存時建議將索引范圍設置為發布地圖的整幅地圖范圍,以便與SuperMap iServer Java 緩存索引范圍保持一致。在根據需求修改地圖緩存的范圍信息時,也需要保持索引范圍是整幅地圖范圍。

緩存圖片與出圖設備無關的特性

利用 SuperMap iDesktop7C 製作地圖緩存時,如果 SuperMap iDesktop 7C 所在的計算機與 SuperMap iServer Java 所在的計算機不是同一台機器,有可能由於設備顯示地圖解析度不同,從而不同設備上的緩存不能很好地一起使用,例如拼接出現問題等。SuperMap iDesktop 7C 桌面支持配置地圖緩存與設備顯示解析度無關。具體的操作方法如下:

3.6. 在 SuperMap iDesktop7C 桌面端生成的地圖緩存,如需在 SueprMap iServer Java 服務端發布,需要注意,生成緊湊型地圖緩存時,不要對緩存進行加密,即不要設置密碼,否則在服務端發布會有問題。