Cloud Foundry samples学习笔记8: Grails Twitter
来源:互联网 发布:动漫资讯网站知乎 编辑:程序博客网 时间:2024/05/19 17:52
这个样例程序是一个Grails应用程序,它模拟了类似于twitter的微博场景,旨在演示如何在一个Grails应用程序中将标准的SQL数据库、MongoDB和Redis三者结合使用,并使其能够部署到Cloud Foundry上运行。
程序repository地址:https://github.com/SpringSource/cloudfoundry-samples/tree/master/grailstwitter
用户所发布的状态(status)消息通过 domain.org.grails.twitter 包内的Status类表示,它分别持有1个Person和1个Authority引用来与状态的发布者关联并提供简单的访问权限。
程序repository地址:https://github.com/SpringSource/cloudfoundry-samples/tree/master/grailstwitter
一、MySQL用户管理
应用程序使用MySQL对用户信息进行管理,并进行访问控制。访问控制是通过Spring Security框架来处理的。domain.org.grails.twitter.auth 包内的Person、Authority两个域类分别表示用户信息及权限信息,均通过Hibernate进行OR映射,而PersonAuthority类则作为事务类与MySQL数据库交互。用户所发布的状态(status)消息通过 domain.org.grails.twitter 包内的Status类表示,它分别持有1个Person和1个Authority引用来与状态的发布者关联并提供简单的访问权限。
二、MongoDB状态消息存储
用户发布的状态消息使用MongoDB面向文档数据库存储。之所以做出这种选择,是由于在微博网站应用中,需要存储用户会发布的大量状态消息数据,因此MongoDB是一个比较理想的选择;另外MongoDB也可以良好支持一些简单类型的内嵌集合数据结构,如String类型的列表。
用户状态类Status如下:
package org.grails.twitterimport org.grails.twitter.auth.Personclass Status { static mapWith = "mongo" static transients = ["author"] static searchable = { only = ["message", "dateCreated"] authorId index: "no", store: "yes" } String message Long authorId List<String> tags = [] Date dateCreated Person getAuthor() { return Person.get(authorId) } static constraints = { message maxSize: 160 }}
通过代码可以看到,Status类与MongoDB绑定,并限定状态消息为160字符以内。它持有一个String类型的列表属性tag,用来存储status中的标签,也就是两个#号之间用来标记话题的部分。将tag嵌在Status类内部而不是用单独的域类表示,这使得对tag的查询变得复杂并且低效,本程序对此的处理是建立另一个后台服务线程 service.org.grails.twitter.TagService,从status中提取tag以及对tag信息的搜集等工作都是由这个后台服务线程来做的。
三、Redis标记缓存
微博应用需要对状态消息的tag进行评级,并统计有多少状态中包含某个tag。然而这一操作的耗费是极其高的,尤其对于超大用户群的情形。本程序中,每当一条用户状态发布出来,就在后台线程TagService中对所有tag进行重新评级,并缓存在Redis数据库中。每次接收到来自主页的tag请求,就从Redis缓存中拉去,从而节省开销,提高响应速度。以上只是对程序逻辑的简单介绍,至于更多细节以及三种数据存储服务之间的协作,请亲手部署并尝试,相信可以获得更清楚的认识。
四、将应用程序部署到Cloud Foundry
部署应用程序之前,最好修改属性文件中的应用程序名字,以避免默认的部署名字和url与云平台上已部署的应用冲突。比如,将 app.name=后的名字改成有自己特色的 grailstwitter-myname。确保你已经正确安装了grails的cloud foundry插件之后,就可以开始部署应用程序了。grails prod cf-push部署过程中,需要将程序与MySQL、MongoDB和Redis三个云服务绑定。部署完成之后,就可以通过url:grailstwitter.cloudfoundry.com 访问应用程序了。
- Cloud Foundry samples学习笔记8: Grails Twitter
- Cloud Foundry samples学习笔记5:在Cloud Foundry上部署Grails应用程序 petclinic
- Cloud Foundry samples学习笔记 3:services
- Cloud Foundry samples学习笔记 1 :hello-java
- Cloud Foundry samples学习笔记 2:hello-spring-mysql
- Cloud Foundry samples学习笔记9:模拟股票交易系统stocks
- Cloud Foundry samples学习笔记6:使用Mongodb和Mysql交叉存储的Cloud Foundry应用
- Cloud Foundry samples学习笔记7:Cloud Foundry上的Spring Integration应用集成
- Cloud Foundry samples学习笔记4:使用rabbitmq协作计算圆周率
- 【Cloud Foundry】Cloud Foundry学习(四)——Service
- 【Cloud Foundry】Could Foundry学习(三)——Router
- Cloud Foundry
- Cloud Foundry
- Cloud Foundry 深入学习二 集群部署
- Cloud foundry warden源码学习(1)
- Cloud foundry warden 源码学习(2)
- Cloud foundry warden 源码学习(3)
- Cloud foundry warden 源码学习(4)
- 黑客伦理(Hacker Ethic)
- ASM(Active Shape Model)算法介绍
- Cocoa 编程之表格视图实例
- Linux中的工作队列
- 定时器C++版
- Cloud Foundry samples学习笔记8: Grails Twitter
- oracle分页技术
- 转发和重定向
- C++迭代器 iterator
- Java新手入门标准
- 常用键盘ASCⅡ码,方便查阅!
- const T vs. T const by Dan Saks
- NYOJ - 蛇形填数
- android中对/data/data/<package name>/files下文件的读写操作