我的数据库中有一个包含事务的表,这是一个示例。
# id, user_id, type, eur_amount, usd_amount, convert_currency, convert_currency_amount, eur_exchange_rate, usd_exchange_rate, payment_source, table_source, table_source_id, package_id, package_name, deleted, date_elem, date_added, date_modified
2, 1803, membership, 60.19, 59.82, EUR, 60.19, 1.000000, 0.993912, website, users_transactions, 2, 103, 1 Monat, 0, 2022-08-22, 2022-08-22 13:03:50, 2022-11-07 11:43:25
用户可以使用过滤器按天获取付款金额。
例如,他可以请求两个日期之间的数据。
在服务器上,我可以选择两个日期之间的所有数据并将对象数组返回到前端。然后,前端必须遍历对象并通过将eur_amount
每天的总值添加到一个总值中来创建分析。
我也可以在服务器上做所有的工作groupBy
等等,所以前端不必做任何计算。
更好的做法是什么?什么性能更好?
这正是您的数据库所构建的那种“繁重的工作” 。
答对了!
如果您检索所有行,将它们发送到客户端并让它进行聚合,那么您将通过网络发送很多很多倍的行数,这会更慢,并且您依赖于客户端做艰苦的工作-它可能根本不足以完成这项工作[好]。
如果可以的话,通常认为在服务器端完成大部分工作“更好” 。
在数据库层进行数据转换的另一个好处是将数据的代码、结果和形状集中到一个地方。您稍后可能会决定要在除主应用程序之外的其他报表或应用程序中使用相同的转换数据,并且将其集中在数据库中会使这种方式更容易和更易于使用。