鐘愛青
(廣東省機械高級技工學校,廣州 510450)
基于手機的圖書共享系統設計與實現
鐘愛青
(廣東省機械高級技工學校,廣州 510450)
設計與實現一個手機圖書共享系統,便于學校師生圖書共享,用戶通過手機將自己不用的圖書共享出去,另外的用戶通過手機App查找自己附近位置的圖書并聯系圖書持有人借書,實現圖書資源共享。該系統基于移動互聯網實現方案,分為服務器端,手機端、業務邏輯集中在服務器端,手機端作為顯示媒介,服務器端實現基于集群的負載均衡以及分布式緩存,保證系統具有高可用性、高可靠性以及高性能。
共享圖書;移動互聯網;手機App
目前,圖書越來越貴,而大部分學生看完之后就不會再看,最后是當成了廢紙賣掉或者扔掉,造成了資源的極大浪費,而有的學生卻因為資金不夠而看不到想要的書;而智能手機的迅速普及及手機App迅速發展,為兩者的結合互補提供了渠道。學生可以利用移動設備實現書本的流通,為學生在工作生活中提供一個最高效的共享平臺。
目標:搭建結構清晰、功能簡單、內容簡要、界面美觀的手機圖書共享系統。
用戶可以把自己的紙質書或者電子書和別人一起分享,分享越多信用分越高,同時可以指定借書費用,對于貴重的書可以收取一定的費用。用戶可以查到朋友或附近的人共享出來的圖書以及讀什么類型的圖書,互相借閱。用戶可以加入相同興趣的讀書群,和朋友一起討論圖書內容,交流心得。用戶可以邀請朋友加入共享圖書,只要加入的人越來越多,那么大家就可以擁有一個巨大的免費圖書館。用戶可以通過掃描ISBN條形碼,一鍵共享自己的圖書。
LBS應用包含了海量的地理位置信息,對海量地理信息的查詢、處理、分析是LBS應用最基本最主要的技術問題。
傳統的關系型數據庫主要設計應用于企業系統,對于海量數據處理在性能與方便性上效果并不好。而隨著Google發表了專門用于大數據處理的非關系型數據庫BigTable的設計,市場上出現了許多優秀的直接支持地理位置操作的非關系型數據庫 (也就是NoSQL數據庫),經過多年的發展,它們已經具有了很高的性能及操作方便性,其中的佼佼者就是MongoDB。
對于基于位置信息的應用,關鍵功能是用戶可以查找基于某個位置一定范圍內的信息查詢,這樣的需求我們可以采用傳統的關系型數據庫技術,也可以采用先進的非關系型數據庫技術。
以關系型數據庫MySQL為實現例子,我們只需要寫一條SQL就可以實現:


但是該SQL使用了大量的函數計算,每條SQL的計算量都會非常大,也不能很好的利用數據庫緩存,在海量數據應用中,性能將會非常的差,對于用戶是非常糟糕的體驗。
而MongoDB在設計時就已經考慮到大數據及地理位置處理的特點,所以MongoDB在底層上就支持大數據查詢分析,支持地理位置索引,在底層API內置了用于地理位置的查詢及距離計算;同時,作為非關系型數據庫,MongoDB還擁有高性能,支持復雜查詢,支持完全索引,支持集合存取等特性,即使不應用于地理位置處理,也可以用于大型的數據庫應用系統。
以MongoDB為例子,我們要實現上面的功能,只需要調用MongoDB的一個內置命令就可以得到我們想要的結果:

db.runCommand(command)是一個工具方法,用于執行數據庫的命令,command表示數據庫的一個命令,在我們的例子中,command就是 {geoNear:"books", near:[113.360137,23.161534],num:100},表示查詢在[113.360137,23.161534]位置的最多100本圖書。返回結果是一個數據集,包含了圖書信息等,默認按距離由近到遠排序。因為geoNear是MongoDB內置于用于地理位置處理的函數,在性能上已經做了優化,所以該查詢效率非常高,在大型應用下也有非常好的效果。
MongoDB還有很多其他功能用于支持地理位置信息處理,如geointersect,geowithin,near等。
例子1,查詢指定位置的圖書,并按距離排序:
有兩個命令可以用:$near或$nearSphere,兩個命令的操作方法一樣,需要傳入指定的地理空間坐標,返回坐標范圍內的圖書,不同的是$nearSphere返回的范圍是球面,而$near是正方形。
操作如下:


該結果表示返回坐標[113.360137,23.161534]附近的100個圖書信息,然后按照距離從近到遠排序。如果不指定返回數量,默認返回100條信息,如果要指定數量,則使用limit條件指定。如:

也可以指定查詢的空間最大距離 ,使用條件$maxDistance指定,如:
> db.books.find ({'coordinate':{$near:[113.360137, 23.161534],$maxDistance:30}})
例子1,查詢指定位置的圖書,并按距離排序,并顯示距離:
我們可以使用例子1的結果然后再計算距離,但是需要計算多一次,如果用$geoNear查詢則可以一次返回結果,$geoNear與$near功能更強大,提供了更多的參數,也返回了更多的信息。如:


該方法返回的結果包含了更多的詳細信息,如時間、數量、距離等,例如results中的dis,它表示了與目標坐標的距離。

與一般的企業系統一樣,手機App也遵循通用的軟件設計原則,如最基本的三層架構設計原則:數據層、業務層、展示層,分別代表了對數據的不同處理方式:數據存儲,數據加工,數據顯示。數據層是最核心的一層,因為它是數據存取的地方,是整個系統的核心資產,是連接底層數據庫與業務層的渠道;業務層是系統的邏輯,將數據層取得的數據按照用戶期望的邏輯加工處理,然后提交給展示層顯示;展示層是直接面對用戶的地方,它將業務層加工好的數據展示在用戶界面上,展示層的質量代表了整個系統的質量。
(1)數據層
數據層是數據存取的地方,主要任務就是與關系型數據庫或者NoSQL數據庫或者文件服務器打交道,保存用戶提交的數據或文件,返回用戶請求的數據或文件給業務層,考慮到用戶的請求量非常巨大,而大部分數據庫處理能力有限,所以加上緩存模塊非常有必要。數據庫數據是存放于硬盤,而緩存一般存放于內存中,因為內存讀寫速度遠遠快于硬盤,當前內存也已經相當便宜,所以使用內存作為緩存模塊非常適合。如下圖1:

圖1 總體架構圖
業務層向數據層請求數據時,數據層首先將請求的參數轉成一個關鍵字,然后根據關鍵字去緩存模塊中查找數據,如果命中(即查到),則返回緩存的數據給用戶,如果沒有命中,則去數據庫抓取數據,并將結果數據作為值,請求參數作為關鍵字存入緩存模塊中,然后返回結果數據給用戶。當然,并不是所有數據都要緩存,緩存只適用于很少變動的數據,對于經常變動的數據,緩存并沒有效果,還會因為寫入緩存的次數增多給系統造成新的負擔,不同的緩存數據可以設置不同的緩存有效期,基本不變的數據的緩存期可以設置長一些,變動相對頻繁的則可以設置短一些。
(2)業務層
業務層體現了系統的邏輯,它將數據層取得的數據按照用戶期望的邏輯加工處理,然后提交給展示層顯示給用戶。業務層一般以接口的方式暴露給展示層調用,由接口以HTTP/HTTPS的方式在網絡中暴露出來,所以業務層需要考慮到安全的設置,確保接口的調用只能由已經認證的請求者調用。
(3)展示層
展示層也就是我們通常所說的UI,由于它直接面對用戶,一個UI的質量一定程度上代表了App的質量,一個好的UI會吸引用戶使用,相反,一個界面難看,操作不友好的UI,用戶基本不會用。展示層調用業務層的接口,包括請求數據與保存數據。它是整個App展最復雜的一層,要考慮界面的美觀,操作的友好性,手機與平板的界面布局,不同屏幕大小的適配等。展示層調用業務層的接口必須是異步回調,不能使用UI主線程,因為網絡等不同原因,獲取或保存數據可能是一個比較耗時的操作,如果用線程同步的方式,必然會阻塞UI主線程,也就是我們常見的界面卡死問題。展示層還需要考慮網絡狀態,根據網絡狀態采用不同的處理方式。如果用戶請求數據時,網絡已經不可用,則需要向用戶提示網絡不可用,如果在展示層有做數據緩存,則可以用之前緩存的數據展示給用戶;保存數據時也一樣,可以提示網絡不可用,數據不會保存,或者先將數據保存到手機緩存上,等網絡可用時,再提交數據到業務層保存。

如圖2所示,系統包括前端App和服務器端Web服務兩個部分,App主要用iOS,Web服務用RESTful WebService框架。

圖2 系統開發框架
iOS開發需要使用蘋果公司提供的Xcode開發工具及SDK,同時還需要在蘋果開發者網站開通開發者帳號。使用Xcode工具及Object-C語言就可以調用SDK提供的各種UI控件及API。
RESTfulWebService是一種輕量級的網絡服務開發框架,它完全基于HTTP協議實現,不需要額外的傳輸協議,還可以利用緩存來提高速度,在性能、效率和易用性上都優于其他網絡服務。RESTfulWebService是基于URL的,一個URL代表了一個資源,對URL的調用即是對業務層接口的調用。返回結果一般有純文本,JSON,XML,通常用的是JSON,因為相比于XML,JSON有體積小的優點,相比于純文本,JSON是一個格式化文本,可以更好地讀寫。


表1 書本信息

表3 書本預約信息

表2 書本圖片

表4 用戶信息

表5 用戶書本記錄

表6 用戶信用記錄




下面圖3-圖8為各個頁面效果圖。

圖3首頁效果圖

圖4 出借頁面

圖5 圖書信息頁面

圖6 借書頁面

圖7 搜索頁面

圖8 信用頁面
[1]徐凱.跨終端Web.電子工業出版社,2014.
[2](美)奎文(Cravens,J.),巴特福德(Burtoft,J.).HTML5敏捷實踐.電子工業出版社,2013.
Design and Im p lementation of a Book Sharing App Based on Phone
ZHONG Ai-qing
(Guangdong Machinery Technician College,Guangzhou 510450)
Design and implements a book sharing App which aims to share books between students or teachers.Users can share the book they don't need any more with the App easily,other users can find the book with LBS search function in the App and borrow the book with few steps.The system is based on themobile Internet,and includes server sidemodule,mobile App module.Server side serves as business center and mobile App serves as user interface.Server sidemodule implementswith load balance cluster and distributed cache and with abilities of high availability,high reliability aswell as high performance
鐘愛青(1984-),女,本科,中級職稱,研究方向為計算機科學與技術
2017-01-17
2017-05-01
1007-1423(2017)13-0071-06
10.3969/j.issn.1007-1423.2017.13.017
Book Sharing;Mobile Internet;Phone App