我需要一些关于如何在monogoDB中构建数据的建议。我有这个应用程序,用户可以查看,添加,编辑和删除信用卡和借记卡交易。以下是数据的外观。
此处的余额列是动态的。例如,如果某人添加了交易日期10-09-2017,则此后余额字段中的所有金额都需要在此时间进行更改以反映新交易。现在,我没有在数据库中保存此余额字段,并且每次用户加载页面,重新加载它以及编辑,删除,添加事务时都会计算它。现在它很快,但我认为,在将来,当用户有大量事务时,它们会变慢,因为这些计算需要在用户显示数据表之前完成。有没有更有效的方法来做到这一点?
此外,我正在客户端进行计算,因此负载在客户端设备上而不在服务器上。我认为如果它在服务器端,并且很多用户开始使用它,那么API请求将变得更慢并且在一段时间之后根本不可用。这是正确的方法吗?
PS:也很难确保读者理解我的问题,但我已尽力了。如果我应该更详细地解释这个问题,或者我是否应该添加更多细节,请告诉我。答案 0 :(得分:2)
这不是关于mongodb的问题,它是关于用户界面的问题。 您是否真的会立即显示整个交易历史? 您应该使用分页(最简单)或在滚动时重新加载以加载数据。
在您因平衡单元计算而遇到问题之前,您更有可能因为以下原因而遇到问题:
显示前100到500个事务,并通过某种方式为用户提供加载早期条目的信息。
更新 - 关于服务器端余额计算:
您可以在服务器端计算余额并将其存储到用作缓存的第二个集合中。如果过去发生了事务插入,则重新计算缓存。为了加快速度,您可以使用快照: 在第三个集合中,您可以按特定间隔存储当前余额,例如具有以下数据结构:
{ Balance: 150000, Date: 2017-02-03, LastTransactionId: 546 }
过去插入事务时,请在该过去之前拍摄最新快照,然后根据该快照重新计算缓存。这样,你。可以保持重新计算的交易数量非常小。