(3)不仅仅是关系型
PostgreSQL不仅仅是关系型数据库,而且可以JSON数据(在MongoDB中称为文档),并可以在此建立索引。
(4)数据类型丰富
PostgreSQL包括了可以说是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备, 比如IP类型和几何类型等;
(5)功能齐全
PostgreSQL 是全功能的自由软件数据库,很长时间以来,PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统(MVCC)、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统。 Inprise 的 InterBase 以及SAP等厂商将其原先专有软件开放为自由软件之后才打破了这个唯一。最后,PostgreSQL拥有一支非常活跃的开发队伍,而且在许多黑客的努力下,PostgreSQL 的质量日益提高[5]。
2。3 云存储技术-七牛云存储
云存储是在云计算(cloud computing)概念上延伸和发展出来的一个新的概念,是一种新兴的网络存储技术,是指通过集群应用、网络技术或分布式文件系统等功能,将网络中大量各种不同类型的存储设备通过应用软件集合起来协同工作,共同对外提供数据存储和业务访问功能的一个系统[6]。
国内外主流云存储,如百度BOS、谷歌Google App Engine,都有相当多的使用人群。但是Google APP Engine需要翻墙很不方便,而百度BOS收费较高,且不提供Go语言的SDK,难以使用。本系统采用“七牛云存储”作为云存储平台,将学习资源持久化存储。
七牛云存储(以下简称七牛),是专为移动时代开发者打造的数据管理平台,为互联网网站和移动App提供数据的在线托管、传输加速以及图片、音视频等富媒体的云处理服务[7]。
采用“七牛云存储”一是考虑到其对于静态资源存储稳定,且查找的性能也很高,二是其对Go语言的支持比较好,三是其收费较低,对于初级开发者来说,这三点非常重要。
七牛云存储共有3种上传策略,分别为直接上传、返回值上传以及回调上传。为了节省带宽,我们选用回调上传的方式,如下图2-1所示,客户端先从服务器端获取上传凭证,然后由客户端直接上传至七牛,待客户端上传成功后,七牛云平台会回调本系统服务器端的API,以通知上传成功。
图2-1 七牛回调上传流程
2。4 Go语言开发框架
Go语言开源的框架很多,但是很多都不满足本系统的需求,经过筛选,最终选用Gin和xorm这两款开源框架。
2。4。1 Web框架-Gin
本系统中Web框架采用Gin。Gin是Go语言的一款开源Web框架,主创是2位大学生,代码托管在Github上,目前已经有6000多的star,Github网址是https://github。com/gin-gonic/gin。
Gin提供类似Express(Nodejs最热门的框架之一)的语法结构,比如中间件,路由的形式等,相较于其他web框架,Gin具有如下特性:
(1) 路由性能良好
由于其采用特殊的路由算法,所以期在路由的选择上非常快,而且在编译是就会提示路由冲突,缺点就是路由没有优先级,即在路由冲突的情况下,直接就会编译不通过。
(2) 框架简单
如revel,beego等框架,虽然功能很完善,但是框架过于庞大,而且封装的东西太多,在没有深入了解的情况下使用会出现很多莫名其妙的问题。Gin框架相对简单,基本只提供路由支持和数据绑定,学习成本低。
(3) 出错日志详细
Gin拥有非常完备的日志系统,包括access_log,error_log等,能够及时暴露错误,极为方便调试。
2。4。2 数据库框架-xorm
本系统的ORM(Object-Relationship-Mapping)框架采用xorm。xorm是一个简单而强大的Go语言ORM库,与Java中的Hibernate和Mybatis类似。通过它可以使数据库操作非常简便。相比于其他ORM框架,xorm具有如下特性: