钟爱青
(广东省机械高级技工学校,广州 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