标签云在MongoDB和go中的实现
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了标签云在MongoDB和go中的实现,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1687字,纯文字阅读大概需要3分钟。
内容图文
![标签云在MongoDB和go中的实现](/upload/InfoBanner/zyjiaocheng/558/9209c4f94bd64c6691f2cd81a86f20ad.jpg)
在关系数据库如mysql中标签云的实现是显而易见的,标签和blog分别在不同的表中,通过join可以比较简单的查询出标签的统计数据。 MongoDB为快速水平扩张以及性能而优化,在MongoDB中没有join,倾向于使用embedding来代替linking关系: Generally, for "contai
在关系数据库如mysql中标签云的实现是显而易见的,标签和blog分别在不同的表中,通过join可以比较简单的查询出标签的统计数据。
MongoDB为快速水平扩张以及性能而优化,在MongoDB中没有join,倾向于使用embedding来代替linking关系:
Generally, for "contains" relationships between entities, embedding should be be chosen. Use linking when not using linking would result in duplication of data.
所以每个blog的标签应该是作为一个数组内嵌在blog记录中。那么就需要遍历所有的blog记录才能统计处所有tag的使用情况。 两种处理方式:
- 用一个额外的集合来保存tag的统计信息,所有涉及tag的操作都去更新这个集合。
- Schedule一个后台运行的job,定时运行mongodb的MapReduce操作来计算tag的使用数据。
第二种方式:
job := mgo.MapReduce { Map: "function(){if(!this.tags) return; for(i in this.tags){emit(this.tags[i],1);}}", Reduce: "function(key, values) {var sum = 0; for(i in values){sum = sum + values[i];} return sum;}", Out: bson.M{"replace":"tags"}, } func CollectTags() { c := session.DB(DB).C("blog") _,err:= c.Find(nil).MapReduce(job, nil) if err!= nil { //TODO: better logger fmt.Println(err) } time.AfterFunc(MapReduceInterval, CollectTags) } func main() { go CollectTags() //Other... }
有了数据,tag云的生成就比较简单了,这里用的是wikipedia上介绍的计算公式:
template:
{{if .}}{{range $tag, $size := .}} {{$tag}} {{end}}{{end}}
最大字体选择28,最终效果即如主页所示。
原文地址:标签云在MongoDB和go中的实现, 感谢原作者分享。
内容总结
以上是互联网集市为您收集整理的标签云在MongoDB和go中的实现全部内容,希望文章能够帮你解决标签云在MongoDB和go中的实现所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。