背景:
我正在构建一个应用程序,该应用程序从外部组织获取损益表,并使用这些报表中的行计算客户支付值。为了计算这些支出,计算需要引用我的数据库中其他两个表中的百分比以确定结果值。此外,用户还可以添加自己的交易,因为有时收入可能来自这些报表中未包含的其他来源。它还允许用户向客户支付需要收回的预付款。计算时也需要考虑这些额外的交易。
由于语句可能非常大,我决定使用 AWS S3 将它们存储为 CSV 文件,并使用 AWS Athena 在仪表板视图中对这些语句进行分析。提到的交易位于其自己的表中,名为
transactions
。
问题:
由于我需要显示来自 2 个不同位置的事务,一个是存储在 AWS S3 中的语句,另一个来自
transactions
表,所以我很难说服自己必须引用这两个位置来提供对一个概念性事物(例如“交易”)进行计算是一个好主意。然而,我想不出另一种方法来做到这一点,既不会导致我的数据库很快变得巨大,也不会导致我每月的成本飙升。
几个月前,我决定将它们全部存储在数据库表中
transactions
是一个坏主意,因为我认为性能损失将是巨大的。单个语句可以有数万或数十万行。因此,想象一下每年有多个用户需要上传大量报表。数据库表会变得非常大、非常快。
另一个问题是,为了获得计算出的交易价值,我需要取每个语句所有相关值总和的百分比,然后在此基础上取额外的百分比(作为费用),以显示真实的价值用户必须向其客户支付什么以及在支付之前他们需要收回多少钱。
问题:
鉴于这些值是单独存储的(MySQL 和 S3)并依赖其他表中的数据来执行计算,我应该如何处理以高性能(且经济高效)的方式计算这些值?另外,这似乎是最好的方法吗? (我知道这是基于意见的,但我现在可以对此使用一些受过教育的意见)。
我已经经历了一些不同的概念,目前为止的概念如下:
transactions
表中。transactions
表中添加带有 statement_id
和 0
交易金额的参考行。transactions
表中的数据,同时还查询 AWS S3 以从 statement_id
列引用的语句中获取数据.0
金额替换为每行的计算金额。注:
在更改计算所需的其他两个表中的百分比或在创建/删除交易时,让 AWS 监视这些更改并自动再次运行计算并用新文件替换 S3 文件,从而也替换了 URL 引用。
财务报表充满了废话和其他你不需要的东西。编写一个应用程序以从报表中提取所需的数字。
将数字放入为后续步骤构建的表格中。扔掉其余的东西(或者像保存图片一样保存它 - 只是一个没有特定结构的大斑点)。
这些原始数字会进入数据库(MySQL / Aurora / 等等)。主键将包括(至少)company_id(链接到公司表)和年份。
如果需要,构建汇总表,从这些原始数字中提取小计、差异等。
然后编写“报告”来显示公司比较、同比比较等。