股市金融数据的数据库架构设计

时间:2021-02-11 18:49:35

标签: database mongodb database-design nosql finance

我正在尝试找出每天插入的财务数据的最佳结构。 查询数据有 3 个用例

  1. 查询当前数据的特定符号
  2. 按值查找当前交易品种(其中价格 < 10 且股息.amountPaid > 3)
  3. 绘制每个品种的历史价值(不包括查询 2010 年和 2020 年之间的所有股息.收益率)

目前正在为此考虑使用 MongoDB,但我不确定哪种结构最适合我的需求。将每个符号的所有数据嵌入 10 年的时间似乎太多了,所以我想也许是嵌入每个符号的当前数据,并创建对历史文档的引用。

您会采用什么方法来存储这些数据? MongoDB 不是很好的解决方案吗?

这是一个符号数据的小例子。

{
  "symbol": "AAPL",
  "info": {
    "company_name": "Apple Inc.",
    "description": "some long text",
    "website": "http://apple.com",
    "logo_url": "http://apple.com"
  },
  "quotes": {
     "open": 111,
      "close": 321,
      "high": 111,
      "low": 100
    },
  "dividends": {
    "amountPaid": 0.5,
    "exDate": "2020-01-01",
    "yieldOnCost": 10,
    "growth": { value: 111, pct_chg: 10 } /* some fields could be more attributes than just k/v */
    "yield": 123
  },
  "fundamentals": {
    "num_employees": 123213213,
    "shares": 123123123123,
    ....
  }
}

谢谢。

1 个答案:

答案 0 :(得分:0)

<块引用>

您会采用什么方法来存储这些数据?

根据您发布的信息(示例数据和用例),我认为将历史数据存储为单独的集合听起来不错。

影响数据库设计(或数据模型)的一些重要因素是数据量和查询类型 - 您计划对数据执行的最重要的查询。假设您发布的 JSON 数据(用于股票代码)可用于执行前两个查询 - 您可以从将历史数据存储为单独集合的想法开始。交易品种的历史数据文档可以是一年的年份范围 - 取决于查询、数据大小和信息类型。

MongoDB 的基于文档的模型允许灵活的模式,这对于轻松实现未来的更改和要求非常有用。请注意,一个 MongoDB 文档最多可以存储 16 MB 的数据。

参考MongoDB Data Model Design