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

导航至

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

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

时间序列数据和 InfluxDB 的强大功能

时间序列数据以按时间索引的数据点为特征,是股票市场分析的核心。InfluxDB 3.0 构建于 FDAP 开源技术堆栈之上,是一种专门构建的时间序列数据库,为处理此类数据提供了多项优势

  • 高摄取率: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(适用于 Apple Inc.)
    • 字段: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 高效的时间序列数据管理,我们创建了一个强大的股票数据分析平台。本文展示了如何利用这些技术来处理实时数据摄取、快速查询和高效数据存储——所有这些都是金融分析的关键要素。