英语原文共 10 页,剩余内容已隐藏,支付完成后下载完整资料
基于NodeJS和MongoDB的快速监控系统
李亮
计算机科学学院
中国传媒大学
中国北京重点实验室
安全和防护行业
中国,北京
朱立谷,文谦尚,冯东宇,肖子达
计算机科学学院
中国传媒大学
中国北京重点实验室
安全和防护行业
中国,北京
摘要 - 针对Express监控系统的功能需求,讨论了使用AngularJS构建前端框架的优势,利用NodeJS构建后端Web服务器的优势以及存储数据的性能优势 基于MongoDB。 本文重点介绍使用MongoDB存储大数据的存储解决方案以及基于MapReduce的统计分析解决方案。 本文主要讨论如何构建满足基于NodeJs的大数据可视化需求的Web服务。
关键词 - 数据存储;统计分析;NodeJS;MongoDB;MapReduce
一、引言(标题1)
随着互联网 时代的到来,网购已成为日常生活中不可或缺的购物方式。 根据2015年中国网购市场,2015年中国网购市场已达3.8万亿元。 截至2016年,中国网购量已达3.5亿。 数以亿计的网上购物者已经产生了大量的快递件。 2015年,交付数量达到205亿。 平均每天产生的钞票数量为6000万。 可以预见,未来这些数字将呈指数增长。
Express中生成的数据是非常有价值的数字资源,其中包括衡量中国社会经济水平的重要指标。快递的数据信息对行业趋势分析和安全监管具有重要影响。因此,对Express数据的研究对于指导资源分配和规范在Express中的规范具有重要作用。目前,安全系统中的大量离线数据占据了大约400TB的内存,已经达到全球印刷材料产量(200PB)的0.2%。数据主要包括票据信息,国家信息和分行信息,这是快递行业的重要敏感数据。因此,建立一个实现离线数据管理的监控平台,对行业趋势预测,行业组织安全和安全监管的优化具有重要作用。
二、关键技术
A. AngularJS
AngularJS是由Google维护的开源JavaScript库,用于帮助单个页面应用程序运行。 其目标是通过MVC模式(MVC)功能增强基于浏览器的应用程序,使开发和测试更加轻松。
- MongoDB
MongoDB是一种功能强大,灵活,高性能,易于扩展的数据存储方式。 它是一个面向文档的数据库,而不是关系数据库,是NoSQL。[1] 所谓的面向文档的,使用更灵活的“文档”取代原有关系数据库中的“行”概念。 文档可以是数组,文档和其他复杂数据模型的值。 而文档的关键不是预定义的,不会被修复。 设计MongoDB的主要思想之一是可以交给客户端的操作从服务器传输到客户端,例如生成对象ID和其他操作解决方案。 MongoDB作为通用数据库,除了能够创建,读取,更新,删除数据外,还提供了一系列独特的功能不断扩展。[2]
- MongoDB支持通用的二级索引,允许多个快速查询,提供唯一索引,组合索引,地理空间索引和全文索引。
- MongoDB支持“聚合管道”。 用户可以从片段创建复杂的聚合,并通过数据库自动优化它们。
- MongoDB支持一个时间限制集,适用于某些时候会过期的数据,例如会话。 同样,MongoDB也支持固定大小的集合来存储最近的数据,比如日志。
- MongoDB支持一种非常易于使用的协议来存储文件和文件元数据。
MongoDB在关系数据库中没有一些共同的功能,例如连接查询和生成线路以获得更好的可伸缩性。 因为分布式系统中的这两个功能很难使用。 MongoDB的主要目标之一是提供卓越的性能,MongoDB可以动态地填充文档,还可以预分配数据文件以利用额外的空间来换取稳定的性能。 MongoDB使用尽可能多的内存作为缓存,试图为每个查询自动选择正确的索引。 总之,MongoDB在设计的各个方面都是为了确保他的稳定表现。 尽管MongoDB功能非常强大,并且试图保留关系数据库的许多功能,但它并不追求关系数据库的所有功能。 只要有可能,数据库服务器就会处理客户端要实现的生成和逻辑。 这种紧凑的设计是MongoDB可以实现如此高性能的原因之一。
- NodeJS
用C 语言编写的Node.js是一个JavaScript操作环境。 Node.js是一个JavaScript运行时环境。 Node.js使用Google Chrome V8引擎以获得良好的性能,并且还提供了许多系统级API,例如文件操作,Web编程等。浏览器端的JavaScript代码在运行时受到各种安全限制,客户端系统的操作受到限制。 Node.js使用事件驱动的异步编程,并为网络服务设计。 Node.js的设计思想以事件驱动为核心,它提供绝大多数基于事件的异步风格的API。以Net模块为例,其中Socket对象有以下事件:connect,data,end,timeout,drain,error,close等。使用Node.js的开发者需要根据其注册相应的回调函数商业逻辑。这些回调函数是异步执行的,这意味着虽然这些函数似乎是在代码结构中按顺序注册的,但它们不依赖于它们出现的顺序,而是等待相应的事件触发。事件驱动和异步编程的重要优势在于充分利用系统资源。代码的实现不需要等待某个操作完成,而有限的资源可以用于其他任务。这种设计非常适合后端网络服务编程,这是Node.js的目标。在服务器开发中,并发请求处理是一个大问题,阻塞函数会导致资源浪费和时间延迟。通过事件注册,异步功能,开发人员可以提高资源的利用率,并且性能也会提高。从Node.js提供的支持模块中,我们可以看到许多函数(包括文件操作)是异步执行的,这与传统语言不同。为了便于服务器开发,Node.js的网络模块特别大,包括HTTP,DNS,NET,UDP,HTTPS,TLS等,开发人员可以在此基础上构建Web服务器。
三、系统架构和技术解决方案
- 系统架构
Express监控平台分为四个主要级别:数据集成,数据存储,数据分析和垂直级数据应用层。 下图显示了Express监控平台的具体分层结构布局。
图1.系统架构
在数据集成层中,我们使用实时或动态方法从Oracle数据库导出11g数据。 同时,使用恢复方法导出备份数据,并使用数据清理工具实现数据预处理。 最后,将数据导入到MongoDB中。
在数据存储层中,使用MongoDB来存储数据。 由于其分散性和弱一致性,MongoDB可以确保访问速度。 加上其文档存储的结构,用户可以更轻松地访问数据。
在数据分析层,系统使用MapReduce实现统计分析和机器学习,完成大数据处理和分析。
在数据应用层,使用Node.js Nginx集群,基于标准的宁静云服务接口提供数据服务,通过可视化的大数据已经在前端呈现。
- 数据存储解决方案
快递数据存储解决方案的目标是满足快递行业大数据(包括历史数据和实时数据)的存储,备份和高性能读写需求。 它旨在为数据分析提供有效的数据,并为保护性能提供基础。
- 总体架构概述:针对Express行业庞大而复杂的数据,结合硬件性能和技术路线要求。 服务器集群分为:分析和应用服务器组,MongoDB存储服务器组。 分析和应用服务器组由两台SX204-12大数据一体机组成,每台机器配备4个双服务器节点,实现数据分析处理,存储节点路由和配置控制。 Mongo DB存储服务器组由8台SX206-12大数据一体机组成,每台大数据一台机器配置6台单服务器节点,实现数据分布式存储[3]。 它显示在下面的图片中:
图2.系统架构
- MongoDB分布式存储架构:
图3.MongoDB分配存储架构模型
图3显示了MongoDB分布式存储体系结构模型,具体组件如下:
碎片服务器:针对快速数据的特点以及MongoDB分布式存储的健壮性和效率,存储服务器组的48个节点分为16个切片,每个切片(主,从,仲裁节点)有3个副本。 考虑到性能和效率,使用上述配置可以更好地避免主机的单点故障,还可以自动从主副本进行切换[4]。
路由过程:由于路由服务对整个数据库的存储速度和读写性能都会有较大的影响,因此它将分配给三个高性能服务器节点,负责管理这些片段。 客户端通过前端路由进行路由,以便整个集群看起来像单个数据库。 客户端应用程序可以透明地使用。 路由进程不存储来自配置服务器的数据。
配置服务器:由路由服务器重用的这3个节点负责存储整个集群配置信息,即切片之间对应关系的数据和分片。
- 配置设置:
块:为了避免块过小,导致存储数据频繁移动,结合实际大小的数据,我们除以256MB的大小。
数据块:根据每天发送的1亿个数据,每个数据大约为0.5KB。 我们计算出一个集合需要设置200个数据块。
数据结构:数据按照数据块和块的大小,通过使用日期键作为键值并且标签项被映射,存储在物理存储节点中。 数据操作的效率均匀提高。
索引:为了提高数据操作和管理的效率,数据使用唯一标记数据的键值进行索引。
- 数据库结构
图4.数据库结构
源数据层:所有历史信息都存储在历史数据库中,将单个集限制为最多1亿个文档。实时数据经过预处理后,将导入到数据库中,生成状态信息和运单数据临时表,预处理后将其存储在特定的集合中。
实现数据层:状态信息数据库中的信息仅用作下一阶段数据分析的辅助信息。因此,不需要在信息存储过程中进行预处理,并且可以存储运单数据库的存储方法。根据运单的年份,每年都会维护运单数据库。
现在的数据层:将覆盖所有时间范围(包括历史数据,实时数据收集)和用户相关信息的数据处理并存储在数据库中,将个体收集限制为最高1亿(1亿)文件。
- 统计分析解决方案
Mongo DB是最受欢迎的大型数据存储平台之一,可用于提供源数据作为云计算技术的底层存储层,如Spark,Hadoop,Pig,Hive,Drill等计算框架。 同时它提供了聚合管道,MapReduce功能以支持大数据的计算,统计,分类等需求。 聚合管道和MapReduce在MongoDB中统称为聚合操作。
- 聚集管道:聚合管道是MongoDB 2.2新引入的聚合框架,它遵循Unix风格的数据处理管道。 输出是集合中的文档进入多级流水线之后的汇总结果[5]。 处理管道中的第一步可能包含多个组件,包括过滤,投影,分组,排序,限制,跳过等。
图5.运单信息
图5显示了一个存储Receiver_name,Receiver_mobile,Receiver_date等字段的运单文档。 目标是统计不同用户的数量(由Receiver_name Receiver_mobile组合字段区分)和首次使用时间。 处理流程分为预处理,统计和结果输出三个步骤。
预处理:预处理:首先按照Receiver_date字段,使用sort命令$ sort MongoDB对流水线第一阶段集合中的数据进行排序。在此期间,您可以使用索引快速排序,并且此步骤的结果是提供用于计算最早时间的有序数据集[6]。否则,在其他处理步骤之后排序并占用大量内存将变慢。
统计:使用mongo DB分组命令$ group根据特定字段(id)对文档进行分组。具体而言,将Receiver_name Receiver_mobile组合字段指定为_id字段,该字段将标识不同的用户。在这种情况下,您还需要计算用户使用的最早时间和数量。可以使用$ first命令查询最早的时间,$ first在对应字段的已排序数据集中更有效。用户数量通过$ sum运算符传递,该运算符将值添加到组中每个文档的计算结果[7]。在应用案例中,将值设置为1可以用作统计值。
输出:最后一步是输出结果,并且可以通过$ out操作将结果文档写入目标集合,并且该操作还可以绕过Mongo DB文档大小限制。 目标集的问题描述如下:当目标集不存在时,创建集合,集合结束后可见; 当目标集合已经存在时,$ out操作会自动覆盖原始集合。
用户的统计数据可以通过上述数据聚合处理的三个步骤获得。 结果如下图所示:
图6.用户信息
在_id字段中记录用户ID字段,userDate记录用户的最早时间,count是用户使用的总次数。
-
MapReduce:MapReduce是Google提出的用于并行操作的大规模数据集(大于1T
全文共6991字,剩余内容已隐藏,支付完成后下载完整资料
资料编号:[15337],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。