【问题标题】:NoSQL (DynamoDB) database designNoSQL (DynamoDB) 数据库设计
【发布时间】:2019-12-04 08:01:06
【问题描述】:

我正在开发一个允许跟踪股票投资组合的小项目。用户可以拥有无​​限数量的投资组合,其中包含无限数量的股票,包括有关股票单位数量和购买价格的信息。

我的想法如下,但我很想听听您的想法:

投资组合表

{ 
  userid, (primary partition key, Cognito)
  portfolioid, (primary sort key, String)
  name, (String)
  stocks[] {
    stockid, (String)
    units, (Number)
    purchase_price, (Number)
    purchase_cost, (Number)
  }
}

库存表

{
  stockid, (primary partition key, String),
  name, (String)
  exchange, (String)
  last_updated, (Date)
  prices[] {
    date, (Date)
    price, (Number)
  }
}

这有意义吗?

我将在投资组合上运行的 2 个关键查询:

  1. 显示投资组合中所有股票的盈亏(最新价格 - 购买价格)
  2. 显示所有投资组合,包括综合损益(投资组合中每只股票的损益总和)

因此,理想情况下,对于这些查询,我会直接在投资组合表中获取股票价格信息,但随后我需要每天更新(或者想象我更改为实时数据)每个投资组合,而对于上述表格,我只会更新股票表。 如何最有效地获取这些数据?

期待您的反馈。提前致谢!

【问题讨论】:

    标签: database data-structures database-design nosql amazon-dynamodb


    【解决方案1】:

    上面的表结构看起来不错,除了stocks表中的以下更改:

    1. 我建议将exchange 设置为partition-key,因为大多数股票是按交易所分类的,而且不同交易所的价格可能不同。
    2. 我希望将股票的历史价格数据放在单独的表中(例如,stocks_archive),这将使在stocks 表上的查询在任何给定情况下更有效地计算盈亏,因此您的@987654326 @ 表应如下所示:
        {   
          stockid, (primary partition key, String), // consider renaming it to 'scrip_code', ref: https://www.investopedia.com/terms/s/scrip.asp
          name, (String)  
          exchange, (String)  
          last_updated, (Date)  
          price (Number)  
        }
    

    一切顺利!

    【讨论】:

    • 感谢您的反馈,桑迪普!关于您的 2 点:1)我的交换也编码在 stockid 中,所以也许不是 100% 必要的,但非常好的一点。 2) 非常有趣!只是一个问题:这是否意味着保存名称,交换每个时间点?这不应该保存一次以确保没有冗余吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 2023-03-23
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多