时间序列数据和MongoDB:第三部分 - 查询,分析和呈现时间序列数据

简介:

556d2e377b4b1a16f9000acd02cf0ef3c6451248

作者:Robert Walters

译者:刘东华 (Martin Liu)

时间序列数据和MongoDB中:第一部分 - 简介 我们回顾了您需要了解的关键问题,以了解数据库的查询访问模式。在 时间序列数据和MongoDB:第二部分 - 模式设计最佳实践中, 我们探讨了时间序列数据的各种模式设计选项以及它们如何影响MongoDB资源。在这篇博文中,我们将介绍如何查询,分析和呈现MongoDB中存储的时间序列数据。了解客户端如何连接以查询数据库将有助于指导您设计数据模型和最佳数据库配置。查询MongoDB有多种方法。您可以使用本机工具(如 MongoDB Shell 命令行)和 MongoDB Compass(基于GUI的查询工具)。通过一系列以编程方式访问MongoDB数据 MongoDB驱动程序。几乎所有主要的编程语言都有驱动程序,包括C#,Java,NodeJS,Go,R,Python,Ruby等等。

MongoDB还通过使用提供第三方BI报告工具集成 MongoDB BI Connector。流行的基于SQL的报告工具(如Tableau,Microsoft PowerBI,QlikView和TIBCO Spotfire)可以直接在MongoDB中利用数据,而无需将ETL数据导入另一个用于查询的平台。 MongoDB Charts目前处于测试阶段的提供了一种可视化MongoDB数据的最快方式,无需第三方产品或扁平化数据,因此可以通过基于SQL的BI工具读取。

在本博客中,我们将介绍使用上述工具查询,分析和呈现时间序列数据。

与聚合框架查询

MongoDB聚合框架允许开发人员表现执行数据准备,转换和分析的功能管道。这是通过使用执行特定阶段的操作来完成的,例如分组,匹配,排序或加工数据。流经阶段的数据及其相应的处理称为聚合管道。从概念上讲,它类似于通过Unix shell命令行管道的数据流。数据从前一阶段输入,执行工作,并且阶段的输出用作下一个处理阶段的输入,直到管道结束。图1显示了数据如何流经由匹配和组阶段组成的管道。

f2af29b5f60b956397ca3284b81d0d6281fc9a22

图1:通过聚合管道的示例数据流


$match是第一阶段在这两个阶段的管道中。 $match将整个订单集合作为输入,并提供一个过滤器,其中包含文档列表,其中“status”包含“A”值。第二阶段将这些过滤后的文档作为输入,并执行数据分组以产生所需的查询结果作为输出。虽然这是一个简单的示例,但请记住,您可以构建极其复杂的处理流水线,利用超过25个不同阶段类的100多个运算符,允许您执行转换,编辑,排序,分组,匹配,分面搜索,图形遍历和在不同的集合之间加入,仅举几例。您可以使用其他分布式数据库无法实现的方式处理数据。

通过我们的时间序列数据,我们将使用MongoDB Compass发出一个即时查询,查询给定股票的当日高价。 Compass是GUI工具,可让您轻松浏览数据。一个有用的功能是通过将数据处理阶段组装到画布上,然后将生成的管道导出为用于复制和粘贴到应用程序的代码,从而可视化地构建聚合管道。


寻找给定股票的日高价

在深入查询本身之前,请回想一下,在第2部分中本文章系列的为我们想跟踪的5只股票生成了1个月的股票价格数据。创建的两个集合中的一个称为“StockDocPerMinute”(PerMinute),它包含一个文档,表示特定股票代码的一分钟数据,如下所示。

624994a5ba6a0016fd0122ecf6b4fd194f41bd4a

考虑应用程序随时间要求给定股票代码的日高价的情况。如果没有聚合框架,则必须通过将所有数据检索回应用程序并使用客户端代码计算结果或通过在Javascript中定义map-reduce函数来完成此查询。从性能或开发人员角度来看,这两种选择都不是最佳选择。

请注意,示例文档有一个子文档,其中包含整个分钟间隔的数据。使用聚合框架,我们可以通过使用将子文档转换为数组轻松处理此子文档$objectToArray 表达式,计算最大值并得出所需结果,。

使用MongoDB Compass,我们可以使用Aggregation Pipeline Builder构建查询,如下所示:


11a77f102180f4e246146dfb890b3bef81e8dfe3

图3:第一阶段是$match阶段


89647c5c01409a0bb2eeceb0af7101f43bc59c84

图4:第二阶段是$project阶段


61333a1b1a4a11db74a3fb22083bde3910e74c32

图5:第三阶段是$addFields阶段阶段


ad698905af92db964eae7203d1040e65ed8ef4c0

图6:第四阶段是$group阶段


42ac89b19b4073dd8b00f359a2bde0c162bc3619

图7:第五阶段是$sort阶段

我们可以看到最后阶段的输出显示了每天的最大值。使用聚合管道构建器,我们不需要编写代码。作为参考,MongoDB Compass在前面的图中构建的完整查询如下:

4e763907ae65a1c4b201598b6cb7d77a9edf3f27

利用视图


可以从现有集合或其他视图创建MongoDB只读视图。这些视图充当只读集合,并在读取操作期间按需计算。由于它们显示为另一个集合,因此您可以通过限制对视图的基础集合的访问来添加一层安全性,并为客户端提供对该视图的读取访问权限。如果您想了解有关视图访问控制的更多信息,请阅读博客文章“提供对MongoDB数据的最低权限访问”。

要查看视图的创建方式,请考虑用户要查询股票价格历史记录的方案。我们可以使用createView语法在StockDocPerMinute集合上创建一个视图,如下所示:


6534a701a1050dd9ca058cdb2e40c3a8f13015aa

由于MongoDB只读视图在运行时具体化,因此每个查询都可以获得最新结果。既然定义了视图,就可以像任何其他集合一样访问它。例如,要使用我们可以发出的视图查询“FB”库存的第一个价格条目:


f291579ecb89ff841e3841f3a2a5a7ddd49eb806

您还可以将聚合框架与视图一起使用。这是查询特定日期的所有“FB”股票代码数据。

547f39e612532453c6a999e1d824edbd21192c8a

使用第三方BI报告工具查询时间序列数据


用户可能希望利用第三方商业智能报告和分析工具中的现有投资。要使这些SQL语言工具能够在MongoDB中查询数据,您可以使用名为MongoDB BI Connector的中间服务。


4ff8eae19646294b2d5c181be84eb2a9441d59d0

图8:使用BI连接器使用您最喜欢的基于SQL的报告工具查询MongoDB数据


BI Connector服务向客户端应用程序提供类似于MySQL服务器的端口,并接受发出SQL查询的客户端连接。然后,BI Connector服务将这些查询转换为MongoDB查询语言(MQL),并将查询提交给MongoDB数据库。从MongoDB返回结果并将其展平为表格结构并发送回SQL语音客户端。图8详细介绍了此流程。

为了说明运行中的MongoDB BI Connector,让我们使用Tableau Desktop和MongoDB BI Connector的时间序列数据。 Tableau Desktop具有MongoDB的连接选项。使用该选项并连接到BI Connector中指定的端口,我们看到Tableau枚举了MongoDB数据库中的表列表。

40dd4d0e25d634f557f28b56023cd0302a484ff3

图9:Tableau中的数据源视图,显示从MongoDB BI Connector返回的信息


这些表实际上是我们的MongoDB中的集合。继续使用Tableau中的Worksheet视图,我们可以使用我们在本文档前面创建的View继续并构建一个显示价格随时间变化的报告。

a620f481950ca4edb35333a723ae3a9a829c5266

图10:示例Tableau工作表显示随时间变化的价格


MongoDB图表


在MongoDB中可视化数据的最快方法是使用MongoDB图表。目前可以测试使用,它为用户提供了一个Web控制台,他们可以直接从存储在MongoDB中的数据构建和运行报告。使用图表,没有特殊服务需要运行才能查询MongoDB。也无需将数据移出或将其转换为要查询的其他格式。可以将数据直接作为存储MongoDB的富文档进行查询。与其他只读连接一样,您可以将图表连接到辅助副本节点,从而将分析和报告查询与服务于操作时间序列应用程序的其他群集隔离开来。要查看MongoDB图表如何表示StockGen工具中的数据,请查看价格随时间线图,如图11所示。


f22eea33f66060595295e5094d52d2bad4f2db02

图11:显示随时间变化的价格的


MongoDB图表处于测试阶段,因此详细信息和屏幕截图可能与最终版本不同。


使用MongoDB


进行分析除了使用MongoDB聚合框架发布高级分析查询外, MongoDB Connector for Apache 公开了所有Spark的库,包括Scala,Java,Python和R.这使您可以使用Spark分析引擎进行大数据处理您的时间序列数据可以进一步扩展MongoDB的分析功能,以执行实时分析和机器学习。连接器将MongoDB数据实现为DataFrames和Datasets,以便通过机器学习,图形,流和SQL API进行分析。 Spark连接器利用MongoDB的聚合管道和丰富的二级索引来提取,过滤和处理您需要的数据范围!没有浪费时间提取和加载数据到另一个数据库,以便使用Spark查询您的MongoDB数据!


34ac649b8e3be91bc58416ceb735275f0caff21f

图12:MongoDBSpark连接器


MongoDB 的 R 语言驱动程序为开发和统计人员提供了一流的体验,包括对MongoDB的本地语言,本机语言访问,企业身份验证以及对BSON数据类型的完全支持。使用R语言可用的扩展库,您可以查询MongoDB时间序列数据并确定局部加权回归,所示。

6efccde5d5f647f9ef155b7711582c78ed28c5d3

图13:显示随时间变化的价格和每秒数据平滑的散点图


MongoDB的R驱动程序可通过CRAN R Archive获得。安装完成后,您可以连接到MongoDB数据库并返回可用于R计算的数据帧。上面的图是使用以下代码使用R Studio生成的:


天天天天梯梯梯梯梯梯


总 结


虽然并非所有数据都属于时间序列,但由于允许我们实时而非批量利用数据流的技术推动,其中越来越多的数据可归类为时间序列。在每个行业和每个公司中,都需要查询,分析和报告时间序列数据。实际业务价值来自从数据中获得的分析和见解。 MongoDB使您可以收集,分析和处理环境中的每个时间序列数据。在这三部分系列中,我们介绍了一些针对您的特定应用要求的发人深省的问题。在第二篇博客文章中,我们研究了几种不同的时间序列模式设计及其对MongoDB性能的影响。最后,我们总结了如何使用MongoDB聚合框架和MongoDB Compass查询时间序列数据的系列,以及使用BI连接器和R等分析语言的其他方法。

原型是一回事,但有效处理数TB的数据是不同的场景下的。使用MongoDB,可以轻松地横向扩展时间序列工作负载。通过使用副本集,只读客户端可以连接到副本集辅助节点以执行其查询,使主节点专注于写入。写入繁重的工作负载可以通过分片水平扩展。虽然对MongoDB架构的深入分析超出了这些博客文章的范围,但您可以在找到许多有用的信息:MongoDB Architecture白皮书

物联网(IoT)用例会生成大量的时间序列数据。更大的物联网解决方案涉及支持各种硬件和软件设备以进行数据摄取,支持实时和历史分析,安全性,高可用性以及大规模管理时间序列数据等。 MongoDB正在为全球的关键任务物联网应用提供支持。有关MongoDB物联网的更多信息,请查看 物联网网站


原文发布时间为: 2018-11-06
本文作者:Mongoing中文社区
本文来自云栖社区合作伙伴“Mongoing中文社区”,了解相关信息可以关注“Mongoing中文社区”。

相关文章
|
存储 NoSQL MongoDB
【赵渝强老师】MongoDB写入数据的过程
在MongoDB数据更新时,WiredTiger存储引擎通过预写日志(Journal)机制先将更新写入日志文件,再通过检查点操作将日志中的操作刷新到数据文件,确保数据持久化和一致性。检查点定期创建,缩短恢复时间,并保证异常终止后可从上一个有效检查点恢复数据。视频讲解及图示详细说明了这一过程。
430 23
【赵渝强老师】MongoDB写入数据的过程
|
NoSQL 测试技术 MongoDB
微服务——MongoDB实战演练——根据上级ID查询文章评论的分页列表
本节介绍如何根据上级ID查询文章评论的分页列表,主要包括以下内容:(1)在CommentRepository中新增`findByParentid`方法,用于按父ID查询子评论分页列表;(2)在CommentService中新增`findCommentListPageByParentid`方法,封装分页逻辑;(3)提供JUnit测试用例,验证功能正确性;(4)使用Compass插入测试数据并执行测试,展示查询结果。通过这些步骤,实现对评论的高效分页查询。
264 0
|
11月前
|
存储 JSON NoSQL
查询 MongoDB--SPL 轻量级多源混算实践 4
SPL 支持多种数据源连接,包括 MongoDB 等 NoSQL 数据库。通过外部库形式提供驱动,灵活扩展,可实现实时数据计算与混合分析。
|
NoSQL MongoDB 数据库
微服务——MongoDB实战演练——表结构分析
本文档来源于数据库articledb,展示了一张图片资源。图片宽度为1207像素,高度607像素,采用内联显示方式。内容涉及图像处理与样式设定,适用于文档或网页设计中多媒体元素的布局参考。图片来源为cdn.nlark.com,支持webp格式并附带水印处理。
239 1
微服务——MongoDB实战演练——表结构分析
|
SQL NoSQL Java
Java使用sql查询mongodb
通过MongoDB Atlas Data Lake或Apache Drill,可以在Java中使用SQL语法查询MongoDB数据。这两种方法都需要适当的配置和依赖库的支持。希望本文提供的示例和说明能够帮助开发者实现这一目标。
682 17
|
存储 JSON NoSQL
微服务——MongoDB的数据模型
MongoDB采用文档(document)作为最小存储单位,类似关系型数据库中的行,使用BSON(Binary-JSON)格式存储数据。BSON是JSON的二进制扩展,支持内嵌文档和数组,新增了如Date、BinData等特殊数据类型,具有轻量、高效、可遍历的特点,适合非结构化与结构化数据存储。其灵活性高,但空间利用率略低。BSON数据类型包括string、integer、boolean等基本类型及date、object id等扩展类型。
389 0
|
SQL NoSQL Java
Java使用sql查询mongodb
通过使用 MongoDB Connector for BI 和 JDBC,开发者可以在 Java 中使用 SQL 语法查询 MongoDB 数据库。这种方法对于熟悉 SQL 的团队非常有帮助,能够快速实现对 MongoDB 数据的操作。同时,也需要注意到这种方法的性能和功能限制,根据具体应用场景进行选择和优化。
672 9
|
存储 NoSQL MongoDB
MongoDB 查询分析
10月更文挑战第21天
202 1
|
NoSQL MongoDB 数据库
数据库数据恢复—MongoDB数据库数据恢复案例
MongoDB数据库数据恢复环境: 一台操作系统为Windows Server的虚拟机上部署MongoDB数据库。 MongoDB数据库故障: 工作人员在MongoDB服务仍然开启的情况下将MongoDB数据库文件拷贝到其他分区,数据复制完成后将MongoDB数据库原先所在的分区进行了格式化操作。 结果发现拷贝过去的数据无法使用。管理员又将数据拷贝回原始分区,MongoDB服务仍然无法使用,报错“Windows无法启动MongoDB服务(位于 本地计算机 上)错误1067:进程意外终止。”
|
12月前
|
缓存 NoSQL Linux
在CentOS 7系统中彻底移除MongoDB数据库的步骤
以上步骤完成后,MongoDB应该会从您的CentOS 7系统中被彻底移除。在执行上述操作前,请确保已经备份好所有重要数据以防丢失。这些步骤操作需要一些基本的Linux系统管理知识,若您对某一步骤不是非常清楚,请先进行必要的学习或咨询专业人士。在执行系统级操作时,推荐在实施前创建系统快照或备份,以便在出现问题时能够恢复到原先的状态。
1261 79

推荐镜像

更多