Bigtable 还是 Datastore 更适合存储和使用在线应用程序的财务数据?



我正在创建一个股票分析Web应用程序。我想存储多个股票的财务数据。然后我想对它们使用股票筛选器。该筛选器涉及从后端检索多只股票并对其执行技术指标测试。通过指标测试的股票将退还给用户。假设我想存储一个 pandas.dataframe 例如 Stock:

open    high      low   close    volume
date                                                 
2017-08-01  247.46  247.50  246.716  247.32  55050401
2017-08-02  247.47  247.60  246.370  247.44  47211216
2017-08-03  247.31  247.34  246.640  246.96  40855997
2017-08-04  247.52  247.79  246.970  247.41  60191838
2017-08-07  247.49  247.87  247.370  247.87  31995021
....

我一直在使用数据存储。我为每个股票创建实体,将键设置为股票代码。我使用这样的模型:

from google.appengine.ext import ndb
class Stocks(ndb.Model):
dates  = ndb.StringProperty(repeated=True)
open   = ndb.FloatProperty(repeated=True)
high   = ndb.FloatProperty(repeated=True)
low    = ndb.FloatProperty(repeated=True)
close  = ndb.FloatProperty(repeated=True)
volume = ndb.FloatProperty(repeated=True)

然后我检索多个实体以使用技术指标检查进行循环:

import numpy
listOfStocks = ndb.get_multi(list_of_keys)
for stock in listOfStocks:
doIndicatorCheck(numpy.array(stock.close))

我想查询股票,进行指标检查,然后尽快将结果返回给用户。我应该为此使用 Bigtable 还是数据存储没问题?如果数据存储没问题,这是理想的方法吗?

提前谢谢。

披露:我是Cloud Bigtable的产品经理。

如果您计划拥有大量涵盖整个股票市场的财务数据,Cloud Bigtable 是一个不错的选择:它可以扩展到 TB 和 PB,并且您可以获得对您的请求的低延迟响应,它已经在金融、风险和反欺诈应用程序中使用,并且通过其第三维度原生支持时间序列。请参阅此博客文章和视频,了解FIS如何使用Cloud Bigtable竞标SEC CAT项目。

也就是说,Cloud Bigtable 在单个集群中具有很强的一致性,但如果使用复制,则最终是一致的,因此您必须牢记这一点。如果用户期望强一致性,您可以选择:

  • 使用单个集群实例(仅在单个区域中复制(
  • 如果使用跨区域复制,则通过应用程序配置文件将请求路由到单个集群
  • 考虑使用提供强一致性的其他系统

Firestore 将为您的应用程序提供具有强一致性的无服务器文档数据库,因此,如果这对您的用例很重要,您应该考虑 Firestore。

如果希望能够对数据运行 SQL 查询,请考虑:

  • Google Cloud SQL — Managed MySQL 或 PostgreSQL
  • Google Cloud Spanner — PB 级事务数据库
  • Google BigQuery — 无服务器数据仓库

希望这有帮助!

如您所知,数据存储是使用 Bigtable 实现的。因此,您可以期望它们具有相似的性能。就用例适用性而言,即将被Firestore取代的数据存储更适合存储用户或用户会话相关数据。最重要的是。此外,明确建议将 Bigtable 用于与财务相关的工作负载。

有一个页面专门用于选择最多可以使用此页面作为指南的页面。

最新更新