999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

在線電子表格之數據存儲設計

2013-04-26 02:43:06王劉楊曹洪田雅
計算機光盤軟件與應用 2013年1期
關鍵詞:存儲

王劉楊 曹洪 田雅

摘要:本文通過設計了一種高效的中間存儲格式,即帶索引的XML文件,能隨機存取指定行的單元格,并且壓縮存儲大量重復的單元格,解決了在線電子表格的數據存儲問題。

關鍵詞:在線電子表格;存儲;XML;JavaScript;單元格

中圖分類號:TP391.13 文獻標識碼:A 文章編號:1007-9599 (2013) 01-0187-02

1 引言

在線電子表格是將應用程序部署在服務器上,用戶通過瀏覽器訪問的網絡版電子表格軟件,其功能類似于桌面版電子表格。由于系統本身功能復雜,要處理的數據量大,而網頁所使用的JavaScript和HTML語言的性能遠遠低于桌面版的Java、C++等語言,使得網絡版的開發難度比桌面版更大。

在線電子表格的界面通過網頁來顯示,一個電子表格文檔包含的數據量可能非常大,例如一個512k的ods文檔,就有1000*256個單元格填滿數據,由于JavaScript創建對象的效率低、占內存大,無法將這樣大量的數據裝載到客戶端內存,因此讓客戶端只加載當前顯示的那部分行數據,由于客戶端數據不完整,所有編輯操作必須放在服須器端執行。在服務器端執行操作時文檔對象不能常駐內存,因為可能有很多文檔同時被在線編輯,內存占用將非常大。用關系數據庫存儲每篇文檔也是不合適的,因為電子表格文檔的內容是半結構化的,適合用XML文件存儲,這就意味著每個操作都要讀寫文件,對讀寫效率要求非常高。本文設計了索引文件+數據文件的存儲格式來實現隨機讀寫工作表的行數據。

2 文件存儲結構設計

一個電子表格文檔包含大量數據,由于Web版電子表格每個編輯操作都要讀寫文件,為了提高讀寫效率,我們分成多個文件來存儲,這樣每次只需讀寫與當前操作相關的數據文件,而不需要為無關的數據耗費開銷。目錄結構如圖所示:

當從本地上傳或從服務器打開一個電子表格文檔

時,通過生成一個唯一的ID,在存儲服務器上創建一個名為book+ID的工作簿文件夾。

2.1 book.xml存儲工作簿的信息,包括:風格、默認行高列寬、所有區域命名等,還有若干工作表節點,記錄工作表的名稱和隱藏屬性等。此外,在每個工作表節點下還有公式和圖表所引用的單元格地址,之所以把它們放在book.xml中而不是在各自的工作表文件中,是因為它們都可以跨表引用,這意味著對一個工作表中的單元格區域做了修改,需要查找所有工作表中的公式、圖表看是否需要修改,為了提高查詢效率,把它們集中放在一個文件中。

2.2 charts文件夾下存放圖表的信息,每個圖表一個xml文件,包括圖表的尺寸、坐標、引用的圖片地址、標題、圖例以及x、y屬性。

2.3 sheet+ID文件夾下存放一個工作表的全部內容,ID在創建工作表時由系統生成。

該文件夾包括:

(1)table.xml存儲行列的高寬及隱藏屬性、合并單元格、篩選器和插入的圖片地址等信息。其中行、列節點依序排列,用屬性“repeat='n'”來記錄連續n行(列)有相同的屬性,例如:

表示第100列設置了列寬為0.3cm,其他都是默認列寬。

(2)content.txt存儲單元格的內容,其格式仍然是xml,但為了能隨機讀寫,不能帶最外層的根節點,因此存為.txt。數據按照工作表的行存儲,基本結構為"......",由于每個工作表有65536*256個單元格,很容易產生大量樣式重復又無內容的行列,為了節省存儲空間,用"repeat"屬性記錄完全相同的連續n行或n個單元格。存儲示例:

表示第100行第3列單元格有字符串類型的數據"abc"。上的屬性還有公式表達式、數字格式碼、真實值、超鏈接等等。

一個工作表可能有很多行有數據,如果每次修改一個單元格就要對整個文件全讀全寫是很費時的。Java可以隨機讀寫文件,但必須知道從第幾字節開始讀寫,本文設計了索引文件contentIndex.txt來記錄content.txt文件中每個節點的起始字節和長度,每對索引值的長度是固定的,因此能夠計算出工作表第n行的索引在索引文件中的起始字節,從而讀出索引值,再讀取數據文件。寫回數據文件時直接添加在最末尾,同時更新其索引值。數據不能寫入到原有位置,因為Java的隨機寫文件是覆蓋相同長度的內容而非插入。之所以對建立索引而不是,是因為節點太多,會導致索引文件很大,降低索引文件的讀寫效率。

(3)styles.txt存儲單元格的樣式屬性,結構與content.txt相同,將內容和樣式分開存儲是因為多數操作不會同時修改樣式和內容,這樣避免了讀寫無關的數據。同樣為styles.txt中的節點建立了索引文件stylesIndex.txt。樣式屬性包括字體、字號、粗斜體、下劃線、字符顏色、背景顏色、對齊方式和單元格邊框等等。

2.4 history文件夾存放每個操作的歷史記錄,用于撤銷和恢復詳細存儲格式。Pictures文件夾存放插入到工作表中的圖片。

3 服務器端數據模型

從文件中讀出的單元格數據要建立一定的數據模型才能進行邏輯操作,由于一次讀取的單元格可能很多,如果直接用DOM對象,會內存溢出。我們設計了一套與文件存儲結構對應的數據對象,采用SAX(Stream API for XML)解析方式, 它占用內存很小,每次讀入一段字符流解析,遇到節點的起始標簽、內容和結束標簽分別觸發相應的事件,調用相應的回調函數,創建我們自定義的數據模型。如圖所示:

Cell和Style是基本元素,分別存儲單元格內容和樣式,它們都實現IRepeatItem接口,即都帶repeat屬性,表示同行的連續n個單元格。Row代表工作表中的行對象,也實現IRepeatItem,一個Row對象可以表示連續n個數據完全相同的行。Row對象含有Cell或Style對象的數組,該數組類型為RepeatList,它的元素必須實現IRepeatItem,RepeatList提供了一系列訪問數組元素的方法,包括按行號增加、刪除、獲取和拆分元素,當選中一片單元格區域進行修改時,可能需要把邊界的Row 或Cell/Style對象拆分為兩個。RowsList代表連續n行,含有Row對象的數組,它的start屬性記錄起始行號。

4 前后臺數據交互格式

4.1 操作指令

客戶端接收到用戶的操作后,發送操作指令給服務器進行處理。操作指令為xml格式的字符串,標簽名即操作名稱,屬性包括:工作簿ID,工作表ID,選中的單元格區域和要設置的屬性等等。例如:

表示設置第1行第5列到第2行第5列這個矩形區域的字體為"Georgia",rooSessionId是每個窗口的唯一ID,用于服務器端分別記錄不同窗口的操作歷史,以便撤銷和恢復。

4.2 返回數據

服務器端處理完操作后返回數據給客戶端,格式為JSON(JavaScript ObjectNotation),它是一種輕量級的數據交換格式,它與JavaScript定義對象的語法相同,可以直接轉化為JavaScript的對象,解析效率高。返回數據格式的設計必須涵蓋工作簿全部信息,且盡量簡短,以縮短網絡傳輸時間和解析時間。AJAX的回調函數接收到這個JSON對象后,遍歷每個工作表對象,取出各個子對象,包括工作表信息、單元格信息、圖表、媒體、合并單元格、篩選器等,交給相應的處理器更新內存數據以及界面元素。

參考文獻:

[1]David Hunter,Jeff Rafter,Joe Fawcett. XML入門經典[M].清華大學出版社.

[2]David Flanagan.JavaScript權威指南[M].機械工業出版社.

猜你喜歡
存儲
檔案管理中電子文件的存儲探究
條形碼技術在涂裝生產中的應用
云計算與虛擬化
結構化電子病歷的設計及應用
淺敘國產存儲技術之發展
某醫院數據中心虛擬化的設計與實現
煙臺新型自動氣象站數據本地存儲的設計及實現
關于SQL語言及存儲過程
大型機電設備出口包裝防護
基于Hadoop的業務過程模型管理方法研究
主站蜘蛛池模板: 久久 午夜福利 张柏芝| 日韩在线影院| 欧美人与牲动交a欧美精品| 日韩欧美视频第一区在线观看| 亚洲香蕉在线| 欧美精品成人| 国产午夜不卡| 亚洲美女AV免费一区| 亚洲91精品视频| 国产精品深爱在线| 亚洲中文字幕在线一区播放| 99无码中文字幕视频| 亚洲美女操| 99精品视频在线观看免费播放| 欧美精品亚洲日韩a| 国产啪在线91| 国产99视频精品免费视频7| 精品三级网站| 好久久免费视频高清| 中国丰满人妻无码束缚啪啪| 呦女精品网站| 香蕉久久国产超碰青草| 亚洲中文字幕日产无码2021| 91在线国内在线播放老师| 亚洲一区二区三区国产精华液| 91福利免费| 国产麻豆精品手机在线观看| 国产精品大白天新婚身材| 一个色综合久久| 无码高潮喷水专区久久| 日韩精品视频久久| 色综合五月婷婷| 中文字幕亚洲专区第19页| 国产亚洲精品yxsp| www.av男人.com| 日韩av高清无码一区二区三区| 国产黄在线免费观看| 国产真实乱人视频| 久久免费成人| 手机在线国产精品| 五月婷婷亚洲综合| 日韩av在线直播| 欧美一级高清片久久99| a网站在线观看| 中文字幕乱码二三区免费| 欧美精品H在线播放| 国产十八禁在线观看免费| 天天综合天天综合| 亚洲欧美日本国产专区一区| 成人毛片免费在线观看| 在线中文字幕网| 亚洲永久色| 91免费国产高清观看| 日韩天堂在线观看| 日韩精品毛片| 精品国产黑色丝袜高跟鞋| 亚洲三级影院| 日韩人妻精品一区| 在线欧美一区| 全部毛片免费看| 国产av无码日韩av无码网站| 91精品视频在线播放| 91啦中文字幕| 国产精品一区二区无码免费看片| 久久香蕉国产线看精品| 欧美精品v日韩精品v国产精品| 欧美三级视频网站| 97久久人人超碰国产精品| 91午夜福利在线观看精品| 久久久黄色片| 中文字幕佐山爱一区二区免费| 成人欧美日韩| 18禁黄无遮挡免费动漫网站| 特级精品毛片免费观看| 伊人久久福利中文字幕| 亚欧成人无码AV在线播放| 亚洲无线一二三四区男男| 亚洲一级无毛片无码在线免费视频 | 精品无码日韩国产不卡av| 呦女亚洲一区精品| 99久久这里只精品麻豆| 亚洲中文字幕23页在线|