大量存储在不同地方的交易的计算值该如何处理?

问题描述 投票:0回答:1

背景:

我正在构建一个应用程序,该应用程序从外部组织获取损益表,并使用这些报表中的行计算客户支付值。为了计算这些支出,计算需要引用我的数据库中其他两个表中的百分比以确定结果值。此外,用户还可以添加自己的交易,因为有时收入可能来自这些报表中未包含的其他来源。它还允许用户向客户支付需要收回的预付款。计算时也需要考虑这些额外的交易。

由于语句可能非常大,我决定使用 AWS S3 将它们存储为 CSV 文件,并使用 AWS Athena 在仪表板视图中对这些语句进行分析。提到的交易位于其自己的表中,名为

transactions

问题:

由于我需要显示来自 2 个不同位置的事务,一个是存储在 AWS S3 中的语句,另一个来自

transactions
表,所以我很难说服自己必须引用这两个位置来提供对一个概念性事物(例如“交易”)进行计算是一个好主意。然而,我想不出另一种方法来做到这一点,既不会导致我的数据库很快变得巨大,也不会导致我每月的成本飙升。

几个月前,我决定将它们全部存储在数据库表中

transactions
是一个坏主意,因为我认为性能损失将是巨大的。单个语句可以有数万或数十万行。因此,想象一下每年有多个用户需要上传大量报表。数据库表会变得非常大、非常快。

另一个问题是,为了获得计算出的交易价值,我需要取每个语句所有相关值总和的百分比,然后在此基础上取额外的百分比(作为费用),以显示真实的价值用户必须向其客户支付什么以及在支付之前他们需要收回多少钱。

问题:

鉴于这些值是单独存储的(MySQL 和 S3)并依赖其他表中的数据来执行计算,我应该如何处理以高性能(且经济高效)的方式计算这些值?另外,这似乎是最好的方法吗? (我知道这是基于意见的,但我现在可以对此使用一些受过教育的意见)。

我已经经历了一些不同的概念,目前为止的概念如下:

  1. 将交易存储在
    transactions
    表中。
  2. 每次上传报表时,在
    transactions
    表中添加带有
    statement_id
    0
    交易金额的参考行。
  3. 查询事务后,使用 AWS Athena 联合查询在我的 AWS RDS MySQL 实例中查询数据,以获取
    transactions
    表中的数据,同时还查询 AWS S3 以从
    statement_id
    列引用的语句中获取数据.
  4. 使用 AWS 联合视图根据我上面提到的方式计算数据,并将
    0
    金额替换为每行的计算金额。
  5. 将这些计算交易的结果存储在 AWS S3 中的 CSV 文件中,并返回 S3 URL。
  6. 将参考 S3 URL 存储在某处(?),这样就不需要每次查询数据时都运行计算,这样就节省了我的钱,因为 AWS Athena 按每次查询扫描的字节数收费。
  7. 将计算出的数据返回前端查看。

注:

在更改计算所需的其他两个表中的百分比或在创建/删除交易时,让 AWS 监视这些更改并自动再次运行计算并用新文件替换 S3 文件,从而也替换了 URL 引用。

amazon-web-services architecture amazon-athena
1个回答
0
投票

财务报表充满了废话和其他你不需要的东西。编写一个应用程序以从报表中提取所需的数字。

将数字放入为后续步骤构建的表格中。扔掉其余的东西(或者像保存图片一样保存它 - 只是一个没有特定结构的大斑点)。

这些原始数字会进入数据库(MySQL / Aurora / 等等)。主键将包括(至少)company_id(链接到公司表)和年份。

如果需要,构建汇总表,从这些原始数字中提取小计、差异等。

然后编写“报告”来显示公司比较、同比比较等。

© www.soinside.com 2019 - 2024. All rights reserved.