爱思唯尔的出版量占全球医学和科学研究出版总量的17%%%%,该公司用MongoDB数据库取代了之前采用的NoSQL(非关系型)数据库,从而开启了业务分析的新类别,并将成本降低了50%%%%以上。
全球每年的医学和科学研究投资额约为4万亿美元。爱思唯尔出版了此类研究成果的17%%%%,并通过像文献摘要和引文数据库(Scopus)这样的产品,让更多人了解到这些研究成果。MongoDB是爱思唯尔云平台的核心,它能够帮助公司应用软件及分析学方法,将内容转变为可操作的知识,为客户提供新的见解。
对此,我们采访了爱思唯尔企业技术解决方案部门的应用程序架构师Kim Baddeley。
请您介绍一下贵公司。
爱思唯尔是一家全球性信息分析公司,致力于帮助机构和专业人士推进医疗保健、开放科学、提高绩效,造福人类。爱思唯尔针对战略研究管理、研发绩效、临床决策支持和职业教育,提供数字化解决方案和工具,如同行评议学术文献平台(ScienceDirect)、文件摘要和引文数据库(Scopus)、即用型解决方案(SciVal)、临床搜索引擎(ClinicalKey)和护理和医疗保健教育平台(Sherpath)。爱思唯尔的出版物包括2,500多种数字期刊,如《柳叶刀》(The Lancet)和《细胞》(Cell)等35,000多种电子书,以及《格氏解剖学》(Gray's Anatomy)等诸多标志性的参考用著作。
爱思唯尔隶属于RELX集团,这是一家为全球各行业中的专业人士和企业客户提供信息和分析服务的跨国集团。
请您阐述一下贵司应用MongoDB的情况。
MongoDB是我们管理内容和数字资产的核心所在,它驱动着爱思唯尔基础设施的两大关键部分:
虚拟总仓库是我们的内容中枢,我们用MongoDB管理每项研究的基于JSON格式的元数据,包括标题、作者、日期、摘要、版本号和发行权等。为我们创收的出版应用程序也是使用VTW访问相应的研究项目
统一云服务配置在虚拟总仓库边上,从而将物理二进制内容资产(如:PDF、Word文档、HTML、笔记本)存储到亚马逊云服务的S3存储区,由MongoDB管理资产的元数据,包括标题、其在S3中的索引位置、文件大小等
复制之前,我们平台上存储的物理资产有12亿,体现为2亿个MongoDB文档。我们平均每天服务5000万个API调用,在出版周期的高峰期,该数字更是高达1个亿。
贵司是从一开始就使用MongoDB数据库吗,是否用过其它数据库呢?
我们开始用的是基于键值的NoSQL数据库,通过“键”来索引到存储在S3的资产。内容元数据也同二进制资产一起存储在S3中。我们发现这种方式有一定的局限性。其一是成本太高,另外就是几乎不可能实现针对内容分析的更复杂的商业查询。
我们决定另寻出路,于是对 MongoDB 做了概念验证(PoC),MongoDB 通过了所有测试,所以我们决定改用MongoDB。
你们是怎么想到采用MongoDB的呢?
我们当前的内部数据模式是JSON-LD模式,而MongoDB提供本地JSON文档存储,同时具备丰富的查询语言和分布式、可扩展设计,所以MongoDB似乎是理想的选择。
我们采用敏捷开发来创建和运行应用程序。有了MongoDB,我们的开发人员可以加速进展,在不必预定义数据库模式的情况下就可以开发新服务。
您能给我们详细描述一下迁移过程吗?
整个迁移过程是分阶段完成的:
将数据从键值数据库复制到MongoDB数据库
应用程序同时向两个数据库写入,并从原来的键值存储区读取,以保持现有的应用程序功能
一个月后,我们协调了两个数据库,以确保二者是同步的,然后,将所有读取转移到MongoDB数据库,同时,仍在向键值数据库写入。这就可以确保,如有必要,我们还可以再换回
-
又过了一个月,我们将所有流量全部转到了MongoDB,不再向原有存储区写入,并停止使用它
我们还借此机会更新了我们的数据模型。在此前的系统中,我们的元数据和属性存储在不同的地方。MongoDB有着更加多样化的数据模型,这样,我们就可以将这些实体全都放在一个单一的文档中,从而改进报告功能。
改用 MongoDB 后带来了哪些效果?
首先,在保持整体性能水准的同时,我们的成本降低了55%%%%。按初的架构,每个文档在S3存储区被视为对象模型,而在键值存储区的两张表中则被视为一个条目。成本的节约主要源于 MongoDB 性能,如果使用原有的键值表来实现相当的性能代价更大。
其次,我们能够为平台新增很多功能——我们可以回答之前的键值存储所不能解决的商业问题,比如,在开放获取分配策略下,我们可提供多少文章。我们可以用新的方法来来做内容分析,这让我们得以创建新服务,并为公司提供此前所无法认识到的运营洞察力。
此外,为扩展分析功能,我们近用MongoDB Connector for BI完成了一次概念验证。这使我们的商业分析师能够利用现有的Tableau工具直接从MongoDB探索和查看不同结构的内容元数据,而无需事先将数据转移到关系型的SQL数据库。
贵司是如何部署 MongoDB的?
我们在亚马逊云服务EC2上使用MongoDB 企业版。虚拟总仓库当前配置一个单分片,包括三个副本集成员。如需扩容,该配置就为向外扩展奠定了基础,可以根据需要采用Ops Manager,通过图形用户界面或RESTful API提供新分片。无论哪种方式,我们的开发运营团队均无需从命令行人工添加新实例或创建自己的开发脚本。
统一云服务是按地理空间部署的五节点副本集,其成员散布在美国和欧洲的AWS地区,这就使得我们可以在某个地区出现彻底故障的情况下,依然持续提供服务。
除配置外,我们也用Ops Manager监控集群健康和查询绩效,并实现支持时间点恢复的增量备份。我们用MongoDB的访问控制功能来管理底层内容资产的访问权限,用加密存储引擎确保数据的落盘加密安全。
我们主要使用Java开发应用,所以我们会用到MongoDB Java driver,并且开始使用Scala驱动。在从键值数据库迁移到MongoDB的过程中,我们也用MongoDB Connector for Apache Spark处理数据,并且现在用它处理虚拟总仓库资产和UCS资产。
MongoDB是否还用在贵司其他项目中呢?
是的。我们还在生产流程改进项目中采用了MongoDB。虚拟总仓库是我们生产平台的核心,不过,我们正在改进两个旧系统。生产系统负责吸收新内容,然后触发事件驱动型框架,从而驱动生产流程——将资产转化为诸如PDF等所需格式,生成缩略图,创建元数据,丰富内容并将其保存到对象存储区。
迁移过程是分阶段进行的,将特定的功能分成多个微服务。我们正在用Kubernetes将改进的功能打包到Docker容器中,并将MongoDB用作后端数据平台,此外,我们还打算将其与MongoDB Atlas 数据库云服务一起运行。
为何选择 MongoDB Atlas?
从战略层面来讲,我们正试图将软件作为一项服务,用于整体计算型工作,而非对所有事情都亲力亲为。经验证明,这样做,可以让我们加快发展并专注于应用程序,而非后端数据库的操作。
Atlas服务正好符合这一要求——我们可以将所有配置、管理、监控和升级工作都交给MongoDB,从而将我们的团队解放出来,使其专注于满足企业和我们所服务的科学界的需求。从成本角度看,这也是一个明智的选择。我们可以根据需求加速和扩展服务,而无需事先获取和预配资源。此外,我们也不需要为运行数据库而在拓展公司内部专业技能方面进行投资,我们可以将其外包给MongoDB。
爱思唯尔对 MongoDB 数据库的下一步应用计划是什么呢?
MongoDB新发布的4.0版本支持多文档ACID处理,我对此感到非常兴奋。这将有助于我们未来在更多场合使用MongoDB,而且它对于我眼下正在做的项目也十分有用。