杨卫平++张子頔
摘要:现有基于SQL数据库设计社区论坛在面对海量数据和大量并发用户访问时显得力不从心,使用一种全新的架构解决此问题变得迫在眉睫。该文研究了基于MongoDB的社区论坛,采用NoSQL文档型数据库作为数据库存储数据,实现了论坛所具备的发帖、留言、用户管理等基本功能,在处理海量数据和大量访问时论坛性能表现良好。
关键词:MongoDB;NoSQL;社区论坛
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2015)23-0007-04
Community Forum Design and Research Base on Mongo DB
YANG Wei-ping, ZHANG Zi-di
(Department of Electrical Engineering and Information Technology, Shandong University of Science and Technology, Jinan 250031, China)
Abstract: Existing SQL-based database design community forum is difficult to meet the requirements of massive data and large numbers of concurrent users accessing. A new architecture to solve this problem has become urgent. In this paper, a community forumbasedon MongoDB has been designed. By using NoSQL documents data architecture, the forum implements posting, message, user management and other basic functions. In dealing with massive amounts of data, the performance is excellent according to the experimental data.
Key words: MongoDB; NoSQL; community forums
随着Web2.0技术的成熟,越来越多的个人用户参与到互联网体系中来。广大个人用户所贡献的智慧和个人联系形成的社群影响,代替了原来少数人所控制和制造的影响。社区论坛是用户使用Internet来进行连接,执行下载数据或程序、上传数据、阅读新闻、与其他用户交换信息的分享平台。
然而,用户数据的激增、用户实时性要求的增高、需求频繁的变化使得基于SQL数据库设计的传统社区论坛无法满足新的挑战。
因此,寻找一种能够适应未来挑战的社区系统解决方案迫在眉睫。
1 NoSQL数据库
NoSQL,即“不仅仅是SQL”,是一场全新的数据革命性运动。正如Rick Cattel所指出的NoSQL系统通常具有如下特征:
能够使用简单的操作横向扩展很多节点;
能够向节点复制和分配数据;
拥有简单的开发接口或协议;
使用弱并发模型(a weaker concurrency model)而不是使用ACID事务的关系型数据库系统;
能够高效的使用索引和内存存储数据;
能够动态添加新的数据属性。
因此,使用NoSQL设计的数据库系统具有高并发处理能力、弹性弱存储结构、动态的可扩展性等特点,能够满足新型社区系统的需求。
目前,主流NoSQL数据库有MongoDB 、Redis、CouchDB、TC等。其中,MongoDB是一个使用C++开发的文档型非关系数据库,MongoDB可以解决海量数据的访问效率问题,对于规模不断扩大、数据激增的社区论坛系统,这样的能力显得尤为重要。MongoDB在数据类50GB以上的时候,其访问速度是MySQL的10倍以上,每秒可处理0.5万~1.5万次读写请求,同时还包含了支持海量数据存储的分布式文件系统GridFS,同时具有使用Hadoop集群的能力,进一步提高了数据处理能力。
2 系统和模块设计
2.1 系统架构设计
现代Web程序通常规模庞大,结构复杂,使用良好的设计模式不仅能够加快开发速度,还能降低维护难度。因此,系统使用MVC开发模式,采用Struts2、Spring和Spring-Data开发框架。Struts2不仅能够提供一个清晰的框架,通过Action、拦截器等功能可以快速开发J2EE程序;Spring提供了控制反转、面向方面的编程以及一系列实用的开发框架; Spring-Data是一款用于非关系数据库的开发框架,它可以非常容易的访问非关系型数据库,但是它是一个新型的开发框架,功能提供并不是很全面,所以部分对MongoDB的操作还需要破解和完善。
系统整体通过MVC设计,用户在前台页面请求操作,Strut2接收操作并使用Spring装配模型对象,通过Spring-Data与MongoDB进行通信,实现数据交换,之后MongoDB返回数据给SpringData并与Spring框架通信装配模型对象,最后通过Struts2返回至前台页面,最终用户将在前台页面看到结果。
2.2 系统功能设计
社区论坛的主体为数据内容,用户通过帖子页面浏览他人分享的数据内容。因此,论坛要能够浏览帖子,同时,当用户在浏览完帖子后使用回帖功能发表对帖子的见解。用户可以通过信息面板了解用户的等级信息,可以修改自己的昵称进行每日签到等功能。
社区论坛通常会通知自己的会员活动消息,因此,用户应该能够浏览新闻,管理员则应该能够管理新闻。
部分权限不足的用户是不能访问重要帖子的,因此需要权限管理的功能。同时,管理员能够禁言用户,增加删除新闻,以及增加、删除和修改版块信息等功能。如图2所示为功能UML用例图。
2.3 数据库设计
MongoDB是文档型非关系数据库。它由数据库、文档、集合三部分组成。数据库是MongoDB的最大存储单位,每个数据库可以包含多个集合,每个集合又可以包含多个文档。每个文档是可以有自己的数据结构的,不像关系型数据库每行记录都有相同的信息,MongoDB文档的属性可以在需要的时候为特定文档加入,这样就节省了存储空间。图3是它的基本架构。
MongoDB文档是可以通过对象直接对应文档属性的,这样符合面向对象的程序设计思想,有利于程序的开发,且适应变化的需求。
4 性能测试
本系统使用CPU为E3-1230v3内存8GB的服务器上测试,分别使用不同的数据量进行插入和查询操作,其中插入操作耗时为一次插入全部数据量的耗时,它模拟了大量用户连续数据交换的场景,可以发现约29.57s即可插入百万级数据量,即使插入千万级也仅仅需要4min,完全能够满足大量用户插入数据。查询耗时为在数据量基础上进行单记录查询,实验结果表明查询速度完全满足需求。
5 结束语
在NoSQL文档型数据库MongoDB,以及Struts2、Spring和Sprint-Data开发框架下,实现的社区论坛系统能够满足海量数据存储及大量用户访问的需求,且性能表现良好。
参考文献:
[1] 黄锐, 孙娜. Web2.0环境下SNS的发展策略探析[J]. 商场现代化, 2009(7): 14-15.
[2] 霍多罗夫. MongoDB权威指南[M].北京: 人民邮电出版社, 2011.
[3] Cattell R. Scalable SQL and NoSQL data stores[J]. Acm Sigmod Record, 2010, 39(4): 12-27.
[4] 潘凡. 从MySQL到MongoDB——视觉中国的NoSQL之路[J]. 程序员, 2010(6): 79-81.
[5] Dede E, Govindaraju M, Gunter D, et al. Performance evaluation of a MongoDB and hadoop platform for scientific data analysis[C]// Proceedings of the 4th ACM workshop on Scientific cloud computingACM, 2013.
[6] 张文盛, 郑汉华. 基于MongoDB构建高性能网站技术研究[J]. 吉林师范大学学报:自然科学版, 2013, 34(1): 123-127.
[7] 蔡柳青. 基于MongoDB的云监控设计与应用[D]. 北京: 北京交通大学, 2011.