【问题标题】:Managing constantly changing data in Database管理数据库中不断变化的数据
【发布时间】:2018-02-25 21:50:57
【问题描述】:

我需要一些关于如何在 monogoDB 中构建数据的建议。我有这个应用程序,用户可以在其中查看、添加、编辑和删除贷记和借记交易。下面是数据的样子。

此处的余额列是动态的。例如,如果有人添加了交易日期 10-09-2017,则余额字段中的所有金额都需要在该时刻更改以反映新交易。现在,我根本没有在数据库中保存这个余额字段,而是在每次用户加载页面、重新加载页面以及编辑、删除、添加事务时计算它。现在它很快,但我假设将来当用户有很多事务时,它们会变慢,因为这些计算需要在向用户显示数据表之前完成。有没有更有效的方法来做到这一点?

我也在客户端进行计算,所以负载在客户端的设备上,而不是在服务器上。我认为如果它在服务器端,并且很多用户开始使用它,API 请求会变得慢得多,并且在一段时间后根本不会不可用。这是正确的方法吗?

PS:确保读者理解我的问题也很困难,但我已经尽力了。请让我知道我是否应该更详细地解释这一点,或者我是否应该添加更多细节。

【问题讨论】:

    标签: node.js mongodb angular transactions database


    【解决方案1】:

    不是mongodb的问题,是用户界面的问题。 你真的会一次显示整个交易历史吗? 您应该使用分页(最简单)或在滚动时重新加载来加载数据。

    在您因平衡单元计算而出现问题之前,您更有可能遇到以下问题:

    • 从网络加载缓慢(几乎可以肯定)
    • 由于 DOM 大小导致页面交互缓慢(可能)

    显示前 100 到 500 笔交易,并为用户提供某种方式来加载较早的条目。

    更新 - 关于服务器端余额计算:

    您可以在服务器端计算余额并将其存储到用作缓存的第二个集合中。如果过去发生了事务插入,则重新计算缓存。为了加快速度,您可以使用快照: 在第三个集合中,您可以按特定间隔存储当前余额,例如具有以下数据结构:

    { Balance: 150000, Date: 2017-02-03, LastTransactionId: 546 } 
    

    在过去插入事务时,获取该过去时刻之前的最新快照并根据该快照重新计算缓存。这边,你。可以将重新计算的交易数量保持在很小的水平。

    【讨论】:

    • 感谢您的回答。即使我像你说的那样实现分页,为了得到余额,我仍然需要计算从交易开始到最后一笔交易的余额,每次在交易列表上进行 CRUD 操作,对吗?
    • 交易是否会改变?由于交易是过去的事件,它们应该是不可变的。新交易总是附加在最后。那么一直在重新计算它们的原因是什么?
    • 使用可以在添加新交易时指定日期的选项。例如,如果他们上周忘记添加交易并发现了它,他们可以输入上周的日期并输入交易,因此需要更改该交易之后的所有余额。
    • 您能否预测插入此类过去交易的频率?
    • 哇!这是一个策略。让我尝试以这种方式实现它,似乎它需要一些工作来最初设置它。谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 2013-02-25
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多