国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

移動圖書館的數據存儲系統(tǒng)研究

2016-05-16 02:54封俊
太原學院學報(自然科學版) 2016年4期
關鍵詞:存儲器數據量應用程序

封俊

(太原學院,山西 太原 030032)

近年來,隨著無線通信網絡和智能移動終端的發(fā)展,使得基于移動終端的圖書館應用成為可能。各大高校作為學生比較集中的區(qū)域,使用基于Android 系統(tǒng)智能手機上網的用戶群體是非常龐大的,甚至一些高校Android 智能手機的普及率已經遠遠超過了計算機。因此,如何有效利用這一信息技術平臺,使廣大學生能夠方便、快捷地使用圖書館資源,成為未來高校圖書館發(fā)展的一個重要研究課題。

移動圖書館應用程序包含哪幾種數據類型,以及如何高效地存儲這些數據,一直是此類應用程序的核心問題。本文主要研究目前Android 系統(tǒng)下常用的四種數據存儲方式——SharedPreferences 存儲、文件存儲、關系型數據庫和面向文檔數據庫,以及其各自的實現原理,通過一系列批量存儲和隨機查詢實驗,檢驗各種存儲方式的存取效率,分析這四種數據存儲方式的優(yōu)缺點,闡述每種數據存儲方式在移動圖書館應用程序中的適用范圍。

1 Android數據存儲方式

1.1 SharedPreferences存儲

SharedPreferences 是Android 平臺上一種輕量級的存儲方式,其本質是將Key-Value 這種鍵值對形式的數據以XML 文件格式存儲[1],并提供非常簡便的方法來讀寫這些數據。SharedPreferences 存儲方式只能存儲基礎類型數據,包括布爾型、浮點型、整型、長整型、字符串型以及字符串的集合,對于更復雜的數據結構就無能為力了。

使用SharedPreferences 存儲存儲數據需順序執(zhí)行以下4個步驟:

1)獲取應用上下文環(huán)境對象。

Context context = getActivity();

2)通過上下文環(huán)境對象來創(chuàng)建或者獲取SharedPreferences 對象的實例。

SharedPreferences sharedPref=context.getSharedPrefer_ences(“mobile_lib”, Context.MODE_PRIVATE);

3)首次使用SharedPreferences 對象時系統(tǒng)會在應用程序目錄中建立 “shared_prefs” 的目錄,其絕對路徑為 “/data/data/應用程序包名/shared_prefs/”,通過SharedPreferences 對象就可以實現讀取數據了。

//讀取借閱證編號

int readerID = sharedPref.getInt(“ReaderID”, 0);

4)如果需要實現寫入操作,還需要創(chuàng)建編輯器對象Editor。在編輯器Editor 中插入數據,確認提交后寫入手機存儲器。

//寫入借閱證編號

SharedPreferences.Editor editor=sharedPref.edit();

editor.putInt(“ReaderID”, readerID);

editor.commit();

1.2 文件存儲

Android 底層文件存儲基于Linux 文件系統(tǒng),并使用了Java 的標準輸入輸出接口來讀寫數據文件[2]。幾乎所有的Android 移動設備的文件系統(tǒng)都包含了兩個數據存儲區(qū)——內部存儲器和外部存儲器。由于內部存儲器容量有限但讀寫速度較快,主要用于存儲系統(tǒng)文件、應用程序安裝文件及其核心數據等;而外部存儲器一般是可擴展存儲器,容量較大但讀寫速度相對較慢,適合于存儲大型數據文件和應用程序之間共享的數據文件等。因此使用文件存儲數據前,我們應該首先對數據進行分析,確認數據是否必須存儲于內部存儲器,否則盡量使用外部存儲器。

我們使用文件存儲前必須根據數據類型判定使用內部存儲還是外部存儲。如需使用內部存儲,通過應用上下文環(huán)境對象獲取內部存儲目錄,并創(chuàng)建File 對象。

File file=new File(context.getFilesDir(), filename);

如需使用外部存儲,首先必須在應用程序的清單文件中添加讀寫外部存儲權限,然后再通過應用上下文環(huán)境對象獲取外部存儲目錄,并創(chuàng)建File 對象。

File file=new File(Environment.getExternalFiles_Dir(), filename);

此時,分別在內外存中,創(chuàng)建了名為filename的文件。

保存數據時以文件名作為參數,通過openFile_Output 方法打開一個輸出流對象,此時可以使用Java 標準輸出方法將數據以字節(jié)方式寫入指定存儲器。

FileOutputStream outputStream=openFileOutput(filename, Context.MODE_PRIVATE);

outputStream.write(bytes);

讀取數據時同樣以文件名作為參數,通過openFileInput 方法打開一個輸入流對象,此時可以使用Java 標準輸入方法將數據以字節(jié)方式從指定存儲器中讀出。

FileInputStream inputStream=openFileInput(filename);inputStream.read(bytes);

1.3 關系型數據庫

Android 系統(tǒng)從最初版本開始,就集成了一個關系型數據庫SQLite。SQLite 是一個功能強大的輕量級嵌入式關系型數據庫引擎[3],其設計目標是為嵌入式設備提供簡單高效的結構化存儲工具。SQLite 支持標準的SQL 語法,遵循了數據庫的ACID 事務,提供插入、刪除、修改操作,支持Null、字符串、數字和二進制等常用數據類型。它占用資源非常的低,運行效率較高,特別適合于移動操作系統(tǒng)。

使用關系型數據庫的第一步是創(chuàng)建SQLiteOpenHelper子類 。Android系統(tǒng)將與應用程序相關的數據庫存儲在一個私有存儲區(qū)中,這個存儲區(qū)其他應用程序無法訪問,以此來保證數據的安全。在使用這個存儲區(qū)時,先要獲取數據庫的引用,也就意味著需要創(chuàng)建專屬于此應用的SQLiteOpenHelper 子類,子類必須重寫onCreate、onUpgrade 和onOpen 方法。此后,通過這個子類的實例對象可以對數據庫進行管理,包括數據庫的創(chuàng)建、版本管理和更新表結構等操作。

第二步,獲取數據庫的引用。SQLiteOpenHel_per 的子類提供兩個方法getReadableDatabase ()和getWriteableDatabase(),分別以只讀和讀寫的方式獲取SQLiteDatabase 實例對象。只有獲取了數據庫引用,也就是SQLiteDatabase 實例對象后,才可以使用SQL 語言對數據庫進行操作。

第三步,對記錄進行操作。SQLiteDatabase 類由Android 系統(tǒng)提供,它封裝了幾乎所有常用的記錄操作方法,例如insert、delete、query、update 等方法,用于實現對數據庫的增、刪、查、改等操作。此外,當以上方法還無法滿足我們的特定操作時,還有一種高度靈活的數據庫執(zhí)行方法execSQL,用以執(zhí)行復雜的SQL 語句。

1.4 面向文檔數據庫

在實際應用中,經常會遇到需要存儲的數據格式未知,類型不確定的情況,此時使用面向文檔數據庫是最適合的。面向文檔數據庫是一種將數據用文檔結構進行存儲的數據庫,屬于NoSQL數據庫的一種[4]。傳統(tǒng)的關系型數據庫是以“行” 為單位對數據進行存儲,而面向文檔數據庫是以一系列語義上自嵌套的 “文檔” 為單位進行存儲的。

文檔是面向文檔數據庫中數據的基本單元,文檔是模式自由的 (schema free),它將多個鍵及其關聯的值以有序對的形式組織在一起,因此并不要求文檔具有某些特定的結構。面向文檔數據庫不同于傳統(tǒng)的關系型數據庫,在其存儲數據之前,無需預先定義表結構,只需將數據規(guī)范化為JSON 格式(一種語義上自嵌套的格式),并對每一個文檔賦以唯一的鍵值“_id”,之后就可以使用面向文檔數據庫進行存儲了。

JSON 格式是文檔中數據的基本構成格式,它是JavaScript Object Notation 的簡稱。JSON 采用完全獨立于語言的文本格式將數據表示為 “名稱:值”對的組合。JSON 值可以是數字(整數或浮點數)、字符串(在雙引號中)、邏輯值(true 或false)、數組(在方括號中)、對象(在花括號中)、null。其中,對象是一種比較特殊的格式,它是JSON 格式的再嵌套。通過以上值類型的組合可以表示各種復雜的數據結構。

在移動圖書館應用程序中,使用面向文檔數據庫,首先需要分析每一條數據的結構和類型,將其分解再重新組織成嵌套的JSON 格式,生成一個文檔。例如對于一本圖書的基本信息可以使用JSON 格式表示為以下形式:

{ “SSN” :209342228, “TITLE” : “Android programming” , “AUTHOR” :{“FIRST NAME” :“Phillips” , “LAST NAME” : “Bill” }, “PRICE” :99.00, “ISBN” : “9787115346438” , …… }

接著,創(chuàng)建一個具有唯一鍵值的空文檔對象,將JSON 格式的數據作為值傳遞給文檔對象。最后,保存到面向文檔數據庫中。此后,對這條數據的查詢、修改和刪除都是通過它的鍵值進行的。

2 四種數據存儲方式對比測試

為了盡可能全面對比評估這四種存儲方式的差異,我們從性能和資源占用率兩方面分別對四者在不同數據量情況下做了測試。由于智能手機存儲器容量的限制,一般手機程序的數據量都不會太大。因此,測試中單條數據為30字節(jié),數據量分別為10000,20000,…… ,50000條,統(tǒng)一在Android 模擬器下運行。測試運行多次,記錄每次存儲所需時間(單位為毫秒),最后匯總取平均值。性能測試結果如表1所示。

表1 存儲性能測試

從表1 可以看出,作為Android 系統(tǒng)提供的輕量級存儲方式,SharedPreferences 具有最好的性能,新型的面向文檔數據庫具有與SharedPreferences 相近的性能,兩者在存儲時間與數據量之間保持線性遞增關系,文件存儲性能比這兩者稍低。關系型數據庫的性能表現最差,與其它三種存儲方式相比,其插入數據所需的時間隨著數據量的增加而明顯增加。

另一方面,在測試中記錄四種存儲方式存儲過程中產生的數據文件大?。▎挝粸镵B),結果如表2 所示。

表2 資源占用情況

從表2 可以看出,與性能測試結果相反,SharedPreferences 最占資源,其余三種存儲方式隨著數據量的增長,資源占用情況相差不大。

最后,分別對已存儲50000 條數據的三種存儲方式做隨機查詢測試,記錄查詢所耗費的時間(單位為毫秒),依然測試多次,取平均值。結果為,SharedPreferences:2ms、關系型數據庫:3ms、面向文檔數據庫:8ms。文件存儲查詢時間與算法息息相關,因此不適合做隨機查詢。

3 各種存儲方式的優(yōu)缺點及其適用范圍

經過以上的分析和測試可知,這四種存儲方式各有其優(yōu)缺點,在程序開發(fā)中要結合應用的實際情況進行選擇。

SharedPreferences 簡單快捷,但是不適合存儲大量數據,并且無法進行條件查詢,因此在移動圖書館應用程序中,可以用來存儲讀者登錄信息、程序配置參數和界面狀態(tài)等簡單類型數據。文件存儲適用于保存少量但文件體積較大的數據,因此適合用以保存圖片、圖書內容(如pdf、doc 文件)、視頻等類型數據。關系型數據庫屬于Android 系統(tǒng)下的大數據存儲方式,支持多種數據類型,有較好的查詢性能,最重要的是支持條件查詢,可以使用結構化查詢語言靈活的從大量數據中查詢到所需的記錄。但是,關系型數據庫缺點同樣明顯,數據庫使用前必須預先定義表結構模式,字段類型不能根據開發(fā)的需要隨時改變,并且插入大量數據時性能較差。因此,關系型數據庫適用于保存那些結構相對固定,查詢頻率較高和數據量較大的數據。面向文檔數據庫是一種新型的NoSQL 數據庫,具有較高的性能,模式自由的特點,使其可以靈活自由的存儲各種類型數據,但是隨機查詢耗時稍長,因此適合于保存那些結構不確定,并且頻繁插入但較少查詢的數據。

4 結束語

本文對Android 平臺下的SharedPreferences、文件存儲、關系型數據庫和面向文檔數據庫四種存儲方式進行了分析研究。在闡述其實現原理的同時,結合移動圖書館應用場景,實現了一個綜合運用以上四種存儲方式的存儲系統(tǒng),分別對其存儲性能、查詢性能和資源占用三個方面進行了測試,通過分析實驗數據,對各種存儲方式優(yōu)缺點進行總結,給出了這四種存儲方式的適用范圍,簡化了應用程序開發(fā)過程。

猜你喜歡
存儲器數據量應用程序
靜態(tài)隨機存儲器在軌自檢算法
基于大數據量的初至層析成像算法優(yōu)化
高刷新率不容易顯示器需求與接口標準帶寬
寬帶信號采集與大數據量傳輸系統(tǒng)設計與研究
刪除Win10中自帶的應用程序
谷歌禁止加密貨幣應用程序
任意2~k點存儲器結構傅里葉處理器
存儲器——安格爾(墨西哥)▲
三星電子將開設應用程序下載商店
微軟軟件商店開始接受應用程序