MaaS:如何使用Next.js和InfluxDB存储和分析实时股票交易数据

导航至

Next.js是最受欢迎的开源Web框架之一,用于托管Web应用程序;然而,此类应用程序的性能监控,直到现在,一直是一个谜。无论您是自己托管Next.js应用程序还是通过Vercel等第三方服务托管,了解应用程序的性能始终有助于使其更高效并提升用户体验。

另一篇文章中,我们讨论了使用PM2工具监控Web应用程序(Node.js & Express)性能的使用案例,以获取应用程序指标并将它们存储在InfluxDB Cloud中进行实时分析。在这里,我们将学习如何在现代Next.js和React应用程序中集成相同的功能以及更多功能,用于股票交易。

时间序列数据和InfluxDB的力量

时间序列数据,以时间作为索引的数据点,是股票市场分析的核心。基于开源技术栈FDAP构建的InfluxDB 3.0是一个专为处理此类数据而设计的时序数据库,提供了处理此类数据的一些优势

  • 高摄入速率:InfluxDB旨在处理大量数据点的涌入,使其非常适合实时股票行情数据。
  • 快速查询处理:其优化的查询引擎允许快速检索和分析历史数据,这对于实时分析至关重要。
  • 高效数据压缩:InfluxDB使用高效的压缩算法,减少大量历史数据的存储需求。
  • 灵活的保留策略:您可以轻松管理数据的保留时间,平衡历史分析需求和存储限制。
  • 基于时间的操作:InfluxDB提供了强大的基于时间的函数和聚合,这对于金融数据分析至关重要。

应用程序架构

我们的演示应用程序(您可以从GitHub下载)由几个关键组件组成

  • 前端:使用Next.js构建,提供响应式和交互式的用户界面。
  • API层:Next.js API路由处理数据检索和写入操作。
  • 数据源:我们的股票数据来源是Alpha Vantage API。您可以从他们的网站获取免费的API。
  • 数据库:我们的时间序列股票数据数据库是InfluxDB 3.0 Cloud Serverless桶。如果您没有账户,可以免费创建一个

以下是数据流的简要概述

  • 用户请求特定股票代码(例如,AAPL)的股票数据。
  • 应用程序从Alpha Vantage API获取数据。
  • 数据被处理并写入InfluxDB Cloud Serverless桶。
  • 应用程序查询InfluxDB Cloud Serverless桶以检索并在Web应用程序的图表中显示数据。
  • 通过定期查询InfluxDB Cloud Serverless桶来提供实时更新。

关键技术及功能

Next.js

Next.js作为我们应用程序的基础,提供前端框架和API路由。其服务器端渲染功能确保快速加载初始页面,而其API路由允许我们安全地与外部服务和数据库交互。

InfluxDB v3 JavaScript客户端

我们使用InfluxDB v3客户端与我们的InfluxDB实例交互。主要功能包括

  1. writeStockData():使用行协议格式将股票价格数据写入InfluxDB。

    stock_price,symbol=AAPL price=150.25 1632735600000000000

    上述行表示

    • 测量:stock_price
    • 标记:symbol=AAPL(苹果公司)
    • 字段:price=150.25(股价)
    • 时间戳:1632735600000000000(自Unix纪元以来的纳秒数)
  2. queryStockData():使用类似SQL的查询从InfluxDB检索股票数据。

Alpha Vantage API

Alpha Vantage API为我们提供历史和实时股票数据。我们使用它来获取给定股票代码的初始数据。

处理时间序列数据

处理时间序列数据的一个挑战是管理数据保留并确保数据点在允许的时间范围内。我们的应用程序包含逻辑来过滤和调整时间戳

const retentionPeriod = 7 * 24 * 60 * 60 * 1000; // 7 days in milliseconds
const oldestAllowedTimestamp = now - retentionPeriod;

const filteredData = data.filter(point => new Date(point.date).getTime() >= oldestAllowedTimestamp);

这确保我们只写入InfluxDB桶的保留期内的数据点,防止错误并维护数据完整性。

实时分析

应用程序通过定期查询InfluxDB以获取最新数据来展示实时分析功能:[图片链接]

const intervalId = setInterval(queryInfluxDB, 30000); // Query every 30 seconds

这允许我们显示最新的股票信息,而不会使数据库因持续查询而超载。

总结

通过结合Next.js构建现代Web应用程序和InfluxDB高效管理时间序列数据的强大功能,我们创建了一个强大的股票数据分析平台。本文展示了如何使用这些技术处理实时数据摄取、快速查询和高效数据存储——这些都是金融分析的关键元素。