什么时候“流水”竟成了本质

老刘 2021-7-23 9:34

各位老师早!

在数据结构设计上,有个场景一直有个疑问。类似于库存的进出流水记录,通过这些流水记录,是可以统计出实际库存的。但是对于需要频繁查询库存的应用,每次查库存都要实时统计,非常耗时。我们采用的做法就是建个缓存表,每次有进出流水,就同步更新一下这个缓存表。

想了解一下,老师们有没有别的做法呢?

乌贼 2021-7-23 12:04

历史的流水记录是不会变的。把昨天的记录定义为历史流水,把历史流水给预计算完保存起来。每次只要把历史结果和增量流水合并就行了。数据量大的话,可以1小时、10分钟一个周期。

UMLChina潘加宇

这个本身倒也没什么问题。

不过说的好像什么时候流水变成本质了,是中了“事件溯源”之类的毒吧。

以下是扩展:

电梯每天跑来跑去,没有记住去过哪里的“流水”,难道就没法知道当前状态了(是运动的还是停止的,运动的话是往上往下,停止的话停在哪里)?

2020年12月6日8时,吴某凡啪啪都某竹,这个是行为。

啪啪的过程被录成视频了,这个视频(流水)是数据的一种。

行为发生之后,对某对象的某些属性值造成了影响。跟有没有录视频没关系。

系统的数据结构以及行为对数据的影响,这些才是本质。举例:

类图描述系统需要维护哪些类和属性,其中“出库”“入库”等流水是可选的。

以及状态机图描述行为对属性值的影响。物品规格的状态机:

(只画了一部分,其他迁移大家自行脑补。如果没有提炼出类似这样的逻辑,)

我们的系统之所以复杂,就是因为要维护类似这样的逻辑。

但是“只要记流水就可以了”的做法很讨人喜欢,因为这不用思考,不用抽象,好像记录现象就可以,不用思考背后的逻辑,刚好可以作为偷懒的遮羞布。

但不管说得怎么天花乱坠,这些复杂逻辑不会凭空消失,你不去探索它,它也不会免费出现在你的系统里,除非已经有人帮你负重前行。

有吗?


weixinpanjiayu2