文章目录

  • 前言
    • 如何设计账户余额的数据准确性?
      • 1、为什么对不住账?
      • 2、如何设计
        • 2.1、设计账户流水的原则:
        • 2.2、详细设计:

前言

  如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
  而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


如何设计账户余额的数据准确性?

1、为什么对不住账?

对不上账的原因很多,比如业务变化、人为修改了数据、系统之间数据交换失败等等,

对不上账是通俗的说法,本质的原因是冗余数据的一致性的问题。
注意这里的冗余数据不是多余和重复数据的意思,而是多份含有相同信息的数据。

对于我们设计者来说,在设计之初,原则上是不应该存储冗余数据:
一是浪费存储空间;
二是让这些冗余数据保持一致是非常麻烦的事情;

但有些场景下,是必须要有冗余数据的,比如账户余额,这个数据在交易过程中被频繁的用到,总不能每次交易,都要通过所有历史交易记录来重新计算一下余额,这样速度太慢了,性能上满足不了交易的需求,所以账户系统保存了每个用户的账户余额,这实际上是一种存储空间换计算时间的设计。

2、如何设计

为了解决这个数据准确性的问题,我们引入了一个新的设计,账户流水。
即每次交易的时候更新账户余额的同时,还需要记录每一笔交易记录,即账户流水,账户流水的基本构成至少包括:
流水 ID、交易金额、时间戳以及交易双方的系统、账户、交易单号等信息。

账户流水的作用:
可以有效地修正由于系统 Bug 或者人为篡改导致的账户余额错误的问题,也便于账户系统与其他外部系统进行对账,所以账户系统记录流水是非常必要的。

2.1、设计账户流水的原则:

  1. 流水记录只能新增,一旦记录成功不允许修改和删除。即使是由于正当原因需要取消一笔已经完成的交易,也不应该去删除交易流水。正确的做法是再记录一笔“取消交易”的流水。
  2. 流水号必须是递增的,我们需要用流水号来确定交易的先后顺序。

因为在对账的时候,一旦出现了流水和余额不一致,并且无法通过业务手段来确定到底是哪儿记错了的情况,一般的处理原则是以交易流水为准来修正余额数据,这样才能保证后续的交易能“对上账”。

2.2、详细设计:

  1. 账户余额表新增字段 【流水ID】记录最后一笔交易的流水号;
  2. 查询并记录当前账户的余额和最后一笔交易的流水号;
  3. 写入流水记录;
  4. 更新账户余额,注意的是要在更新语句的 WHERE 条件中限定,只有流水号等于之前查询出的流水号时才更新;
  5. 然后检查更新余额的返回值,如果更新成功就提交事务,否则回滚事务。同时检查返回值中变更的行数是不是等于 1。因为即使流水号不相等,余额没有更新,这条更新语句的执行结果仍然是成功的,只是更新了 0 条记录;

如何设计账户余额的数据准确性?相关推荐

  1. 大屏数据可视化测试-数据准确性校验

    什么是数据可视化: 首先,数据可视化就是利用计算机图形学和图像处理技术,将数据转换成图形或图像在屏幕上显示出来,并进行交互处理的一种理论.方法和技术.它涉及到计算机图形学.图像处理.计算机视觉.计算机 ...

  2. 关于数据准确性,精益求精,神策数据矢志不渝的坚持

    你是否遭遇过以下场景? 老板:"你提交的报告,怎么和我查的不一样?" 业务部:"ERP 后台显示成单 687 笔,你怎么告诉我成单 620 笔?" 运营:&qu ...

  3. CSS3学习——设计优雅的数据表格

    测试浏览器:Chrome30.0.Firefox 26.0.IE9-11.Opera 18.0.Safari 5.1.7 <table summary="设计优雅的数据表格" ...

  4. 框架设计:实现数据的按需更新与插入的改进--用数据对比进一步说明

    在发布完:框架设计:实现数据的按需更新与插入的改进 之后: 有网友表示不理解,于是这里给出一篇简单的说明对比,表示下改进后好处. 一:场景一:循环5次,同样也是重复提交的问题 using (MActi ...

  5. 票据打印, 账单打印, 标签打印, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印打印,发布,VC++源代码组件库解决方案...

    票据打印, 账单打印, 标签打印, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印打印,发布,VC++源代码组件库解决方案 使用E-Form++源码库开发任何标签,票据,文档,条码 ...

  6. 人机交互界面设计大作业_为什么说大多数UI设计、大数据、人工智能等培训班不靠谱?...

    搜索框中输入UI设计.大数据.人工智能等字,排在最前面的往往是培训班广告,各类网页中更是层出不穷,我要说的是这玩意不靠谱,你说你培训个Javaphthon等还说得过去,这些刚开设不久的新兴热门专业你就 ...

  7. 数据准确性和模型准确性

    一.遇到了什么问题        昨天在看​文献,关于预测中国汽车保有量的.文献中提到了一个数据来源,就是国家统计局每年都会(现在已经暂停)调查不同收入等级(八个等级)收入.人口.汽车拥有量的情况.通 ...

  8. 如何用科学的方法,保障数据准确性

    |0x00 问题描述 上周收到一位读者的询问:怎么保证数据的正确性? 以下是原文: 上游,会遇到根源性问题,比如客户端在数据上报时就传错的情况,比如手抖把下单时间不小心上报成了用户点击商品详情的时间. ...

  9. 微信小程序——微信小程序后台自定义分析,数据准确性分析

    序 由于公司小程序产品大多为信息流产品,所以对小程序图文的数据准确性,精细度有较高的需求,以便编辑人员通过对数据的分析,可以针对性的编写图文,提高爆文数量. 问题描述 公司自己是有一个统计平台,对小程 ...

最新文章

  1. 下面首先来看GCD的使用
  2. python英语-50 行代码,实现中英文翻译
  3. 关于 【通过代理访问】 的研究,【突破 IP ,“无限制”投票】
  4. C# LINQ系列:LINQ to DataSet的DataTable操作 及 DataTable与Linq相互转换
  5. 区块链100讲:ERC20 中文版
  6. 20个JS 小技巧超级实用
  7. 社区OpenJDK代码构建平台投入使用
  8. 大学生身价不如农民工,中国高等教育是否出了什么问题?
  9. 高并发分布式场景下的应用---分布式锁
  10. 海天老师 资深TTT/思维训练专家
  11. 音乐播放器制作 (HTML + CSS + JavaScript)
  12. C/C++中.bss段的解释
  13. sql 查询本月请假的人数_温故而知新---学习SQL练习作业
  14. 爬虫实战 | 手把手用Python教你采集可视化知乎问题的回答(内附代码)
  15. 曲率(Curvature)
  16. POI解析Word中文API
  17. 口红送什么色号,这是一个难题,爬取口红数据,希望对你有所帮助
  18. windows客户端安装时运行时库版本不匹配的问题
  19. libgdx教程_使用libgdx进行Android游戏开发–一天中的原型,第1b部分
  20. Navicat的mysql远程登录方法详解

热门文章

  1. 少儿编程教学平台和scratch课程
  2. html自动全屏js,js实现简单页面全屏
  3. 开水果店前期投入,水果店会有哪些费用
  4. 一个stm32的简单程序的编译
  5. [论文阅读] (26) 基于Excel可视化分析的论文实验图表绘制总结——以电影市场为例
  6. web的前端和后端之分
  7. 给小学生科普计算机,科普知史识:计算机是我们的小助手(适用于小学生).ppt...
  8. call和calling的用法_call和called的区别和用法
  9. 小米昨天发布的新机,简直太TM牛了……
  10. centos8 解决编译安装 nginx时遇到的报错