【发布时间】:2016-05-03 07:24:21
【问题描述】:
我有一张表,其中包含单个帐户的数百万笔交易。每笔交易包含:
-
moment- 交易发生的时间戳。 -
sequence- 一个数字,用于对发生在完全相同moment的事务进行排序。 -
description、merchant等 - 总体信息。 -
amount- 交易的货币价值,可以是正数或负数。 -
balance- 交易后的账户余额(当前和之前所有amount的总和)。这是由系统计算出来的。
假设用户可以插入、删除或修改非常旧交易的amount,则优化了哪些数据结构以快速显示或更新所有交易的正确balance?
我当前的选择是按顺序 M 的B-tree 组织交易,然后在每个节点上存储amount 的总和。然后,如果更新了一些非常旧的事务,我只更新相应的节点 sum 及其所有父节点,这非常快。它还允许我通过单次读取根节点来显示总的balance。然而,为了显示未来记录的正确balance 值,我最终需要读取 M 个节点,假设每个节点都在云存储上,这有点慢。
有没有更好的解决方案?
【问题讨论】:
标签: database data-structures sum aggregate b-tree