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

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:

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中文社区”。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
17天前
|
JSON NoSQL MongoDB
MongoDB Schema设计实战指南:优化数据结构,提升查询性能与数据一致性
【8月更文挑战第24天】MongoDB是一款领先的NoSQL数据库,其灵活的文档模型突破了传统关系型数据库的限制。它允许自定义数据结构,适应多样化的数据需求。设计MongoDB的Schema时需考虑数据访问模式、一致性需求及性能因素。设计原则强调简洁性、查询优化与合理使用索引。例如,在构建博客系统时,可以通过精心设计文章和用户的集合结构来提高查询效率并确保数据一致性。正确设计能够充分发挥MongoDB的优势,实现高效的数据管理。
31 3
|
17天前
|
NoSQL 安全 MongoDB
【MongoDB深度揭秘】你的更新操作真的安全了吗?MongoDB fsync机制大起底,数据持久化不再是谜!
【8月更文挑战第24天】MongoDB是一款备受欢迎的NoSQL数据库,以其灵活的文档模型和强大的查询能力著称。处理关键业务数据时,数据持久化至关重要。本文深入探讨MongoDB的写入机制,特别是更新操作时的fsync行为。MongoDB先将数据更新至内存以提升性能,而非直接写入磁盘。fsync的作用是确保数据从内存同步到磁盘,但MongoDB并非每次更新后都立即执行fsync。通过设置不同的写入关注级别(如w:0、w:1和w:majority),可以平衡数据持久性和性能。
25 1
|
17天前
|
存储 NoSQL MongoDB
【掌握MongoDB】轻松精通MongoDB查询,从基础到高级一网打尽!
【8月更文挑战第24天】在数据驱动的时代,数据库的性能与灵活性对企业至关重要。MongoDB作为一种高性能、无模式的文档数据库,为开发者提供了灵活的数据存储方案。尤其在处理半结构化或多变数据时展现出强大优势。本文重点介绍MongoDB中的查询操作,包括基本查询、条件查询、复杂查询以及字段选择、排序和限制等功能。通过掌握这些基本查询技巧,开发者能够有效从MongoDB中检索数据,支持复杂的业务逻辑。
29 1
|
28天前
|
监控 NoSQL MongoDB
mongodb查询100万数据如何查询快速
综上,提高MongoDB百万级数据的查询性能需要综合多项技术,并在实际应用中不断调优和实践。理解数据的特征,合理设计索引,优化查询语句,在数据访问、管理上遵循最佳的实践,这样才能有效地管理和查询大规模的数据集合。
88 1
|
9天前
|
C# 微服务 Windows
模块化革命:揭秘WPF与微服务架构的完美融合——从单一职责原则到事件聚合器模式,构建高度解耦与可扩展的应用程序
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中借鉴微服务架构思想,实现模块化设计。通过将WPF应用分解为独立的功能模块,并利用事件聚合器实现模块间解耦通信,可以有效提升开发效率和系统可维护性。文中还提供了具体示例代码,展示了如何使用事件聚合器进行模块间通信,以及如何利用依赖注入进一步提高模块解耦程度。此方法不仅有助于简化复杂度,还能使应用更加灵活易扩展。
24 0
|
9天前
|
安全 C# 数据安全/隐私保护
WPF安全加固全攻略:从数据绑定到网络通信,多维度防范让你的应用固若金汤,抵御各类攻击
【8月更文挑战第31天】安全性是WPF应用程序开发中不可或缺的一部分。本文从技术角度探讨了WPF应用面临的多种安全威胁及防护措施。通过严格验证绑定数据、限制资源加载来源、实施基于角色的权限管理和使用加密技术保障网络通信安全,可有效提升应用安全性,增强用户信任。例如,使用HTML编码防止XSS攻击、检查资源签名确保其可信度、定义安全策略限制文件访问权限,以及采用HTTPS和加密算法保护数据传输。这些措施有助于全面保障WPF应用的安全性。
18 0
|
9天前
|
持续交付 C# 敏捷开发
“敏捷之道:揭秘WPF项目中的快速迭代与持续交付——从需求管理到自动化测试,打造高效开发流程的全方位指南”
【8月更文挑战第31天】敏捷开发是一种注重快速迭代和持续交付的软件开发方法,通过短周期开发提高产品质量并快速响应变化。本文通过问题解答形式,探讨在Windows Presentation Foundation(WPF)项目中应用敏捷开发的最佳实践,涵盖需求管理、版本控制、自动化测试及持续集成等方面,并通过具体示例代码展示其实施过程,帮助团队提升代码质量和开发效率。
19 0
|
17天前
|
运维 监控 NoSQL
【MongoDB 复制集秘籍】Secondary 同步慢怎么办?深度解析与实战指南,让你的数据库飞速同步!
【8月更文挑战第24天】本文通过一个具体案例探讨了MongoDB复制集中Secondary成员同步缓慢的问题。现象表现为数据延迟增加,影响业务运行。经分析,可能的原因包括硬件资源不足、网络状况不佳、复制日志错误等。解决策略涵盖优化硬件(如增加内存、升级CPU)、调整网络配置以减少延迟以及优化MongoDB配置(例如调整`oplogSize`、启用压缩)。通过这些方法可有效提升同步效率,保证系统的稳定性和性能。
34 4
|
20天前
|
监控 NoSQL MongoDB
MongoDB数据库的索引管理技巧
【8月更文挑战第20天】MongoDB数据库的索引管理技巧
38 1
|
20天前
|
监控 NoSQL MongoDB
mongodb数据库 使用技巧
【8月更文挑战第20天】mongodb数据库 使用技巧
34 1
下一篇
DDNS