作者: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显示了数据如何流经由匹配和组阶段组成的管道。

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

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

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

寻找给定股票的日高价

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

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

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

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

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

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

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

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

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

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

利用视图

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

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

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

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

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

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

图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数据库中的表列表。

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

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

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

MongoDB图表

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

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

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

使用MongoDB

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

图12:MongoDBSpark连接器

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

图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:第三部分 - 查询,分析和呈现时间序列数据相关推荐

  1. MongoDB 教程三: 高级查询 (SQL到MongoDB映射表)

    查询接口 对于查询操作,MongoDB 提供了 db.collection.find() 方法.这个方法接收查询条件和映射两个条件并且返回一个指向匹配文档的 游标 .你可以使用 limits, ski ...

  2. MongoDB 教程三: 高级查询

    视频:MongoDB 教程三: 高级查询 MongoDB支持的查询语言非常强大,语法规则类似于面向对象的查询语言,可以实现类似关系数据库单表查询的绝大部分功能,并且由于 MongoDB可以支持复杂的数 ...

  3. R语言data.table进行滚动数据连接,滚动连接通常用于分析涉及时间的数据(例如商业销售活动和对应的广告投放的安排之之间的关系)实战:实战和动画说明滚动数据连接的形式及方法

    R语言data.table进行滚动数据连接,滚动连接通常用于分析涉及时间的数据(例如商业销售活动和对应的广告投放的安排之之间的关系)实战:实战和动画说明滚动数据连接的形式及方法 目录

  4. R语言data.table进行滚动数据连接,滚动联接通常用于分析涉及时间的数据实战(动画说明滚动数据连接的形式):rolling joins data.table in R

    R语言data.table进行滚动数据连接,滚动联接通常用于分析涉及时间的数据实战(动画说明滚动数据连接的形式):rolling joins data.table in R 目录

  5. 最新最全的免费股票数据接口--沪深A股深度分析机构持股数据API接口(十二)

    沪深深度分析数据API文档 数据来源:麦蕊智数 请求方式:Get(直接在浏览器打开就可以看到返回的数据) 数据格式:标准Json格式[{},...{}] 数据时效:实时更新 API说明文档:https ...

  6. 「时序数据库」时间序列数据与MongoDB:第一部分-简介

    时间序列数据正日益成为现代应用的核心--比如物联网.股票交易.点击流.社交媒体等等.随着批量系统向实时系统的转变,对时间序列数据的有效捕获和分析可以使组织能够更好地检测和响应事件,领先于竞争对手,或提 ...

  7. mac mongodb可视化工具_「时序数据库」和MongoDB:第3部分-查询、分析和呈现

    在<时间序列数据和MongoDB:第1部分-简介>中,我们回顾了理解数据库的查询访问模式需要询问的关键问题.在<时间序列数据和MongoDB:第2部分-模式设计最佳实践>中,我 ...

  8. 时间序列分析 pdf_多变量时间序列的聚类分析与相似查询——多变量时间序列的相似查询分析...

    多变量时间序列的相似查询分析 1 多变量时间序列相似的定义 多变量时间序列的相似查询,用于描述在给定的多变量时间序列数据库中查找与待分析多变量时间序列相似或匹配的时间序列段.但与传统的待分析对象的精确 ...

  9. 设计数据密集型应用 第三章:存储与检索

    3. 第三章:存储与检索 建立秩序,省却搜索 --德国谚语 文章目录 3. 第三章:存储与检索 驱动数据库的数据结构 哈希索引 SSTables和LSM树 构建和维护SSTables 用SSTable ...

最新文章

  1. 漫谈算法(番外篇) 符号标记以及基本数学公式
  2. iOS自动布局-VFL格式约束
  3. IAR编译提示could not open file lnkstm8s003f3.icf
  4. Focal Loss升级:让Focal Loss动态化,类别极端不平衡也可以轻松解决
  5. callback回调使用 vue_前端动画必知必会:React 和 Vue 都在用的 FLIP 思想实战
  6. vi 搜索命令_vi或vim如何查询关键字
  7. 搜狐视频怎么下载到电脑
  8. Python工程师必看的面试问题与解答(中)
  9. sp+Ssh+Mysql实现的简单的企业物资信息管理
  10. RabbitMQ获取队列的消息数目
  11. 8_19 比赛总结 [暑假集训]
  12. 环形电流计算公式_圆环电流的电流密度
  13. Linux系统中的用户管理
  14. 大数据-浅谈hive优化
  15. 七日杀服务器直连教程,七日杀连接服务器延迟几万 | 手游网游页游攻略大全
  16. dockerkubernetes教程,隔壁都馋哭了
  17. 如何评估开发代码质量
  18. JAVA面试常见问题200+
  19. 邮票面值设计java,[洛谷P1021][题解]邮票面值设计
  20. 计算机《画图》教案学生状态,《认识画图新朋友》优质课教案

热门文章

  1. [原]五分钟搭建gitserver
  2. Oracle自治事务
  3. 《Java编程思想》学习笔记(三)——初始化与清理
  4. Style Intelligence 10特点之用户自定义报表
  5. angular入门--filter搜索
  6. [ 一起学React系列 -- 6 ] 秘术之时间旅行-1
  7. AGG第二十二课 conv_contour函数auto_detect_orientation的字体应用
  8. Svg.Js A标签,链接操作
  9. (转)mq经验总结-转
  10. PHPStorm+XDebug进行调试