时间序列数据和MongoDB:第一部分 - 简介
作者:Robert Walters
译者:刘东华 (Martin Liu)
时间序列数据日益成为现代应用的核心 - 想想物联网,股票交易,点击流,社交媒体等。随着从批量处理系统向实时系统的转变,有效捕获和分析时间序列数据可以使组织在竞争对手之前更好地检测和响应事件,或提高运营效率以降低成本和风险。使用时间序列数据通常与常规应用程序数据不同,您应该遵循最佳实践。本系列博客旨在提供这些最佳实践,帮助您在 MongoDB 上构建时间序列应用程序:
- 介绍时间序列数据的概念,并描述与此类数据相关的一些挑战
- 如何查询,分析和呈现时间序列数据
- 提供发现问题,帮助您收集成功交付时间序列应用程序所需的技术要求
01什么是时间序列数据?
虽然并非所有数据都属于时间序列,但其中越来越多的数据可归类为时间序列 ——让我们可以使用实时的数据,而不是批量的使用。
在每个行业和每个公司中,都需要查询,分析和报告时间序列数据。
想想看,股票当日,交易者不断查看股票价格随时间的变化,并运行算法来分析识别机会的走向。他们正在查看一段时间区间内的数据,例如每小时或每日范围。联网汽车公司可能会获得遥感信息,例如发动机性能和能耗,以改善部件设计,并监控磨损率,以便他们可以在问题发生之前安排车辆维修,他们也会查看一段时间的数据。
02为什么时间序列数据具有挑战性?
时间序列数据可以包括以恒定时间间隔捕获的数据(如每秒的设备测量值),或者以不规则的时间间隔(如警报和审计事件用例生成的数据)捕获的数据。时间序列数据也经常用诸如设备类型和事件的位置之类的属性来标记,并且每个设备可以提供可变的附加元数据。数据模型灵活性可满足各种快速变化的数据提取和存储要求,因此传统的具有严格模式的关系(表格)数据库系统难以有效处理时间序列数据。此外,存在可伸缩性问题。由于多个传感器或事件产生的读数频率很高,时间序列应用程序会生成大量需要提取和分析的数据流。
时间序列数据可以来自不同的来源,每个来源都需要生成、存储并分析不同属性。数据生命周期的每个阶段都对数据库提出了不同的要求 - 从提取到消费和归档。
- 在数据读取期间,数据库主要执行写入密集型操作,主要执行更新和偶尔的插入。提取期间检测到数据流异常时,例如超过特定阈值的值,消费者可能希望得到数据的实时警告。
- 随着更多数据被读取,消费者可能希望通过查询获得特定的见解,并发现趋势。在数据生命周期的这个阶段,工作负载被读取而不是重写,但数据库仍然需要保持高写入速率,因为数据被同时读取然后被查询。
- 消费者可能希望查询历史数据并执行预测分析,利用机器学习算法来预测未来行为或识别趋势。这将对数据库施加额外的读取负载。
- 最后,根据应用程序的要求,捕获的数据可能具有保质期,需要在一段时间后存档或删除。
正如您所看到的那样,处理时间序列数据不仅仅是存储数据,还需要广泛的数据平台功能,包括处理同时读写需求,高级查询功能和归档等等。
03谁在使用 MongoDB 获取时间序列数据?
MongoDB 提供了满足高性能时间序列应用程序需求所需的所有功能。其中一家利用MongoDB 时间序列功能的公司是定量投资管理公司 Man AHL。
Man AHL 的 Arctic 应用程序利用 MongoDB 存储高频金融服务市场数据(
每秒约2亿五千万)。对冲基金经理的定量研究人员(“quants”)使用 Arctic 和 MongoDB 来研究、构建和部署新的交易模型,以了解市场的行为方式。使用MongoDB 与现有专有数据库相比,Man AHL 实现了40倍的成本节省。除了节省成本之外,他们还能够将处理性能提高 25 倍,超过之前的解决方案。Man AHL
在 GitHub 上开源他们的
Arctic 项目。
博世集团是一家跨国工程集团,拥有近 30 万名员工,是全球最大的汽车零部件制造商。物联网是博世的战略计划,因此公司
选择 MongoDB 作为其物联网架构中的数据平台层。该架构为博世集团及其工业互联网应用中的许多客户提供物联网应用,如汽车,制造业,智能城市,精准农业等。如果您想了解更多关于通过管理物联网平台生成的多样化,快速变化和大批量时间序列数据集所带来的主要挑战,请下载
西门子是一家专注于电气化,自动化和数字化领域的全球性公司。西门子开发了“Monet”,一个由 MongoDB 支持的平台,提供先进的能源管理服务。
Monet 使用MongoDB进行实时原始数据存储,查询和分析。
04专注于应用要求
使用时间序列数据时,必须花足够的时间来了解如何创建,查询和过期数据。有了这些信息,您可以优化架构设计和部署架构,以最好地满足应用程序的要求。
在清楚应用程序的要求前,不应该直接确定性能指标或 SLA。
当您开始使用 MongoDB 进行时间序列项目时,您应该清楚以下问题:
写工作量:
- 提取率是多少?每秒多少次插入和更新?
- 随着插入速率的增加,您的设计可能会受益于
MongoDB 自动分片的水平扩展,允许您跨多个节点对数据进行分区和扩展多个客户端的同时连接。 - 虽然单个 MongoDB 节点可以处理来自数万个 IoT 设备的同时连接,但您需要考虑使用分片来扩展它们以满足预期的客户端负载。您是否需要存储所有原始数据点或预先汇总数据?如果预先聚合,可以存储哪些粒度或间隔的汇总级别?每分钟?每15分钟一次?
- 如果您的应用程序要求证明这一点,MongoDB 可以存储您的所有原始数据。但是,请记住,通过预聚合减少数据大小将产生较低的数据集和索引存储,并提高查询性能。每个事件中存储的数据大小是多少?
MongoDB的单个文档大小限制为16 MB。如果您的应用程序需要在单个文档中存储更大的数据,例如二进制文件,您可能希望利用
MongoDB GridFS。理想情况下,在存储高容量时间序列数据时,最佳做法是将文档大小保持在1个磁盘块大小附近。
读工作量:
- 每秒读取查询数量是多少?
- 较高的读取查询负载可能会受益于其他
索引或通过 MongoDB 自动分片进行水平扩展。 - 与写入卷一样,可以使用自动分片来缩放读取。您还可以在副本集中的辅助副本之间分发读取负载。客户是否在地理上分散或位于同一地区?
- 您可以通过部署在地理上更接近数据使用者的
只读辅助副本来减少网络读取延迟。您需要支持哪些常见的数据访问模式?例如,您是通过单个值(例如时间)检索数据,还是需要更复杂的查询来查找属性组合的数据,例如事件类,按区域,按时间? - 创建适当的索引时,查询性能最佳。了解如何查询数据并定义正确的索引对数据库性能至关重要。此外,能够在不中断系统的情况下实时修改索引策略是时间序列平台的重要属性。您的消费者会使用哪些分析库或工具?
- 如果您的数据使用者使用的是Hadoop或Spark等工具,那么MongoDB就有一个
MongoDB Spark Connector,可以与这些技术集成。MongoDB还有用于Python,R,Matlab和其他用于分析和数据科学的平台的驱动程序。您的组织是否使用 BI 可视化工具来创建报告或分析数据?
MongoDB通过MongoDB BI Connector 集成了大多数主要的BI报告工具,包括 Tableau,QlikView,Microstrategy,TIBCO等。MongoDB 还有一个名为 MongoDB Charts 的本机BI报告工具,它提供了在 MongoDB 中可视化数据的最快方法,而无需任何第三方产品。
数据保留和存档:
- 什么是数据保留政策?可以删除或存档数据吗?如果是这样,在什么年龄?
- 如果存档,存档需要多长时间以及如何访问?存档数据是否需要存储或是否可以从备份中恢复?
在 MongoDB 中有各种删除和归档数据的策略。其中一些策略包括使用
TTL索引,可查询
备份,
分区分片(允许您创建分层存储模式),或者只是创建一个架构,您可以在不再需要时删除数据集。
安全:
- 需要定义哪些用户和角色,以及每个实体所需的最低权限权限是什么?
- 加密要求是什么?您是否需要支持时间序列数据的运行时(网络)和静止(存储)加密?
- 是否需要在审计日志中捕获针对数据的所有活动?
- 该应用程序是否需要符合 GDPR,HIPAA,PCI 或任何其他监管框架?
监管框架可能需要启用加密,审计和其他安全措施。MongoDB 支持这些遵从性所必需的
安全配置,包括静态和运行中的加密,审计以及基于角色的粒度访问控制控制。
虽然列表可能无法包含所有需要考虑的事项,但它将帮助您思考应用程序需求及其对MongoDB 架构和数据库配置设计的影响。在下一篇博客文章 2,“
第2部分:MongoDB中的时间序列数据的模式设计 ”中,我们将探索各种方法来构建不同需求集的模式,以及它们对应用程序性能和规模的相应影响。 3,“
时间序列数据和MongoDB:第3部分 - 查询,分析和呈现时间序列数据 ”,我们将展示如何查询,分析和呈现时间序列数据。
文章转载自公众号: Mongoing中文社区