MongoDB在期刊数据库日志管理应用的探析
——以上海图书馆《全国报刊索引》全文库为例
2021-12-29王静
王静
(上海图书馆,上海 200031)
0 引言
图书馆电子文献数据库每天都有很多用户访问和下载文献,后台记录用户信息、行为的日志信息大量增长,并发量也急剧增大。本文以上海图书馆《全国报刊索引》平台为例,为全文数据库系统的日志管理提供一种解决方案。
上海图书馆《全国报刊索引》平台日志数据记录了用户信息、登录信息、全文下载信息和数据库检索信息等。平台日志数据特点:①数据量大,机构用户900多家,个人用户近2万人;平均日登录数1万多次,日检索信息70多万条,日全文下载量2万多条,总日志数量级上亿。②数据结构松散,不同数据调取和统计分析,需要提供不同的报表。③读写操作的高并发性,随着个人服务功能的上线,对数据库访问的并发性要求也日益增强。④开发要更加敏捷:开发周期短,平台日志管理系统开发需在短时间内完成。
传统使用关系数据库,在日志数据管理上结果松散、读写效率不高。为了优化日志数据的存储,提高报表效率,逐步建设开放报表中心的需求,要建立一个有效的日志数据管理系统。
1 MongoDB简介
MongoDB是一个基于文档模型的,支持索引、复制、事务、分片水平扩展的数据库,非常适用于分析和管理日志。第一,它易扩展,灵活的文档数据模型使得处理数据更加直观;第二,它类似于关系型数据库,有丰富的数据查询语言,可建立索引和分布式可扩展设计;第三,它的数据以文件形式加载在内存中,其插入和查询效率要优于关系型数据库。
2 上海图书馆《全国报刊索引》平台采用MongoDB的原因
《全国报刊索引》平台日志管理系统实验调研了非关系型数据库MongoDB和关系型数据库MySQL,来确定哪种更为适应需求。
2.1 实验设计和结果分析
2.1.1 测试目的
因为日志最主要是写入与查询操作,实验就关注日志数据存储记录越来越多的时候,其插入和查询效率将会受到怎样的影响。
2.1.2 测试条件
服务器,Xeon E5-2630,16 G内存,Win2008 64位。MongoDB版本:3.0,无任何优化配置,单机测试;MySQL版本:5.1.49,无任何优化配置,单机测试。数据库接口驱动:Mon⁃goDB:PyMongo 2.1.1;MySQL:MySQLdb 1.2.3。
2.1.3 测试方法和结果
模拟一个用户登录信息的格式数据,数据库中已备有1亿条数据,在此基础上向数据库里插入数据。本次测试,插入数据量为1,20,50,100,1000,5000,10000,100000,200000。
插入性能测试,如图1所示。
图1 插入速率数据
分析:如图1所示,MongoDB的批量插入性能要优于MySQL,随着插入数据量的增大,两者的速率差距越大。在插入数据量小于10000条时,两者速率基本持平。上涨到10000条以上时,两者拉开差异,MySQL比MongoDB要慢很多。
查询功能测试,如图2所示。
图2 查询速率数据
分析:如图2所示,在读取的数据规模不大时,MongoDB和MySQL都能满足用户的需求,但在读取数据规模变大后,MongoDB的查询性能明显优于MySQL,甚至相差2倍。
查询稳定性测试,如图3所示。
图3 查询稳定性比较
分析:不同数量级下面每1000条数据查询的时间:纵坐标是每查询1000条数据所需要的时间;横坐标是查询时数据库的数量,分别为1万,10万,20万,50万和100万。MySQL的稳定性强于Mon⁃goDB。
MongoDB稳定性虽弱于关系型数据库,但随着数据量的增大,MongoDB插入查询效率更高,且存储结构灵活。最终选取MongoDB做《全国报刊索引》平台的日志数据管理系统。
3 《全国报刊索引》平台日志管理系统的设计规划
《全国报刊索引》平台日志数据库结构,如图4所示。
图4 报表结构
几种类型的表设计:
(1)个人用户信息表。存储用户信息。一对一关系,userId作为主键。
(2)组织用户信息表。一个组织可以包含多个用户,一个用户只能属于一个组织。一对多的关系,两张表,用户表和组织表,在用户表中设计Orgid字段,通过其关联用户与组织关系。
(3)用户下载报表。一个用户可以下载多个数据库的文章,一个数据库的文章也可以被多个用户下载。多对多的关系,采用嵌套的设计方案:两张表,Download表存储下载该数据库的所有用户。User表存储用户所有下载的数据库。
4 《全国报刊索引》平台应用MongoDB日志管理后的成效
4.1 服务功能改善
日志管理系统建成后,管理员可以查看用户在网站的任何行为,也可以查看每个模块的操作情况,如查询、新建、删除、编辑等。系统每月自动生成访问报表,邮件形式发送。也可根据管理员的需要,设定特定条件,生成报表。例如本月、上月新增机构用户数、总的机构用户数,本月机构原文索取金额、个人原文索取金额等。
4.2 图形化呈现和分析功能
报表设计了图形化显示,更直观生动的体现数据趋势。管理员分析数据时,一眼就看清新增用户的增长趋势或是各类用户的数据库使用情况。如图5所示。
图5 图形化报表样例
5 《全国报刊索引》平台采用MongoDB日志管理遇到的问题及解决方案
5.1 数据量、并发量增大的问题
运行一段时间后,数据量与并发量快速增长,对存储带来了一定压力。虽然MongoDB带有自动分片功能,但目前还没有太多的数据需要分片,所以采用副本集来保证自动故障转移。
日志数据有一个明显的特性,就是随着时间的增加,其价值变得越来越小。基于这个特性,日志存储日益增大的问题,解决方案是按照一定的周期进行详情归档,再把具体明细移到其他地方存储。
目前是每日归档,把用户的登录信息按日汇总,缩小数据量,提高统计效率,降低存储成本。
5.2 Mongo DB的时间问题
在按日期统计用户登录信息时,归档数量总与实际数量不一致。通过查找资料,发现可能是MongoDB的“时差”问题。当MongoDB保存到数据库的时候,默认为UTC时间(世界标准时间),北京时间比UTC时间早8小时,即UTC时间1月21日中午12:00,北京时间是1月21日20:00。解决方法开始是在RoboMongo通过“Options”-“Display Dates in...”-“Local Timezone”来设置显示本地时间。但在每次读取的时,都需要来回进行转换,比较麻烦。后来发现MongoDB本身提供了解决方法:[BsonDateTimeOptions(Kind=DateTimeKind.Local)]public DateTime OperTime{get;set;}。经过处理后,归档的数量与实际数量终于一致了。
最后结果如图6所示。
图6 MongoDB时差解决方法
6 结语
MongoDB性能的各项实验,它具备的高性能、高扩展性、类SQL的丰富查询和索引等特性,非常适用于上海图书馆《全国报刊索引》的后台日志管理系统。系统建立后,提高了用户日志数据分析的能力,满足了业务发展随时响应的需求,提供了专业报表服务和图形化呈现。同时,支持PC端与移动端,增强了基于数据记录基础上的统计功能,增加词频分析功能,完全将读者的检索词形成词云,保存待进一步分析和利用等。
本文通过MongoDB在上海图书馆《全国报刊索引》日志管理系统中的应用,证明它在文献数据库日志管理上的应用可显著提高文献数据库日志的管理系统性和查询效率,而且成本较低。