交易和余额
transactions and balance
我在承包公司数据库“sql 服务器”上工作。我不知道计算客户余额账户的最佳解决方案是什么。
余额table:为余额创建table,为交易创建另一个。所以我的应用程序将任何交易添加到交易 table 并根据余额 table 值计算余额。
使用查询计算余额:所以我将只创建交易 table。
注意:每年的记录可能高达200万条记录,所以我认为他们每年都需要备份它或类似的东西。
有什么新想法或意见吗?!
对你的两种方式的评论:
- 如果您的查询比更新多得多(100 次或更多),这是一个很好的解决方案。因此,您添加新交易,重新计算余额并存储它。您可以在一次交易中完成,但它可能会花费大量时间并阻止用户操作。因此,您可以稍后再做(例如,更新一次余额 minute/hour/day)。优点:阅读速度快。缺点:余额值与交易总和之间可能存在差异或增加用户操作时间
- 如果您的更新比读取的多得多(例如,有大量交易的交易系统),这是一个很好的解决方案。更新当前余额可能需要时间并且可能毫无价值,因为另一笔交易已经到来 :) 因此,您可以在运行时按需计算余额。优点:总是实际平衡。缺点:计算余额可能需要时间。
如您所见,这取决于您的负载配置文件(读取或写入)。我会建议您从第二种变体开始——它很容易实现,良好的数据库索引可以帮助您非常快速地获得总和(每年 200 万——并不像看起来那么多)。但是,这取决于你。
这个问题好像意见很多,忍不住关了
但是,在我去过的任何有客户的环境中 "balances",业务的一个关键部分是了解每个客户的当前余额。这意味着要有历史交易 table、当前余额 和 审计过程以确保两者一致。
只要数据库发生变化,就会保持当前余额。 "standard" 方法是使用触发器。我的首选方法是将数据更改封装在存储过程中,并在用于修改事务数据的相同过程中具有汇总逻辑。
如果我是你,我也会有一个 transactions
table 和一个 balances
table。例如,让我们考虑您有 1 000 000 个用户。如果一个用户平均有 20 笔交易,那么从交易 table 中获取余额将比从余额 table 中获取余额慢大约 20 倍。还有,有总比没有好。
所以,我会毫不犹豫地选择创建一个balances
table。
当然,您必须在交易 table 旁边有一个单独的余额 table。否则,在读取平衡期间,随着事务的增加,您的性能会一天比一天慢,并且事务的成本会很高,因为其他用户可能会锁定事务 table 以同时读取平衡。
我在承包公司数据库“sql 服务器”上工作。我不知道计算客户余额账户的最佳解决方案是什么。
余额table:为余额创建table,为交易创建另一个。所以我的应用程序将任何交易添加到交易 table 并根据余额 table 值计算余额。
使用查询计算余额:所以我将只创建交易 table。
注意:每年的记录可能高达200万条记录,所以我认为他们每年都需要备份它或类似的东西。
有什么新想法或意见吗?!
对你的两种方式的评论:
- 如果您的查询比更新多得多(100 次或更多),这是一个很好的解决方案。因此,您添加新交易,重新计算余额并存储它。您可以在一次交易中完成,但它可能会花费大量时间并阻止用户操作。因此,您可以稍后再做(例如,更新一次余额 minute/hour/day)。优点:阅读速度快。缺点:余额值与交易总和之间可能存在差异或增加用户操作时间
- 如果您的更新比读取的多得多(例如,有大量交易的交易系统),这是一个很好的解决方案。更新当前余额可能需要时间并且可能毫无价值,因为另一笔交易已经到来 :) 因此,您可以在运行时按需计算余额。优点:总是实际平衡。缺点:计算余额可能需要时间。
如您所见,这取决于您的负载配置文件(读取或写入)。我会建议您从第二种变体开始——它很容易实现,良好的数据库索引可以帮助您非常快速地获得总和(每年 200 万——并不像看起来那么多)。但是,这取决于你。
这个问题好像意见很多,忍不住关了
但是,在我去过的任何有客户的环境中 "balances",业务的一个关键部分是了解每个客户的当前余额。这意味着要有历史交易 table、当前余额 和 审计过程以确保两者一致。
只要数据库发生变化,就会保持当前余额。 "standard" 方法是使用触发器。我的首选方法是将数据更改封装在存储过程中,并在用于修改事务数据的相同过程中具有汇总逻辑。
如果我是你,我也会有一个 transactions
table 和一个 balances
table。例如,让我们考虑您有 1 000 000 个用户。如果一个用户平均有 20 笔交易,那么从交易 table 中获取余额将比从余额 table 中获取余额慢大约 20 倍。还有,有总比没有好。
所以,我会毫不犹豫地选择创建一个balances
table。
当然,您必须在交易 table 旁边有一个单独的余额 table。否则,在读取平衡期间,随着事务的增加,您的性能会一天比一天慢,并且事务的成本会很高,因为其他用户可能会锁定事务 table 以同时读取平衡。