首页 > 其他分享 >对账了解

对账了解

时间:2022-08-27 23:33:59浏览次数:55  
标签:记录 账户 对账 了解 余额 流水 交易 冗余

转自:https://zq99299.github.io/note-book/back-end-storage/01/04.html#为什么总是对不上账

1.对账介绍

对不上账 「是通俗的说法」,它的本质问题是,冗余数据的一致性问题。这里的冗余数据并 不是多余或者重复的数据,而是多份含有相同信息的数据。

比如,我们完全可以通过用户的每一笔充值交易数据、消费的订单数据,来计算出这个用户当前的账户余额是多少。也就是说,账户余额数据和这些账户相关的交易记录,都含有 「账户余额」 这个信息,即流水和余额之间就互为冗余数据。在设计系统的存储时,原则上不应该存储冗余数据,一是浪费存储空间,二是让这些冗余数据保持一致是一件非常麻烦的事儿。

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

但如果只记录余额信息,每次交易的时候更新账户余额,这样做有一个问题,如果账户余额被篡改,是没有办法追查的,所以在记录余额的同时,还需要记录每一笔交易记录,也就是账户的流水。记录流水,可以有效地修正由于系统 Bug 或者人为篡改导致的账户余额错误的问题,也便于账户系统与其他外部系统进行对账,所以 账户系统记录流水是非常必要的。

流水的数据模型至少需要包含:流水 ID、交易金额、交易时间戳以及交易双方的系统、账户、交易单号等信息。

2.事务保证数据一致性

不能提供  单独更新余额或者流水的功能,只提供交易功能。

需要在实现交易功能的时候,同时记录流水并修改余额,并且要尽可能保证,在任何情况下,记录流水和修改余额这两个操作,要么都成功,要么都失败。不能有任何一笔交易出现,记录了流水但余额没更新,或者更新了余额但是没记录流水。 

 

标签:记录,账户,对账,了解,余额,流水,交易,冗余
From: https://www.cnblogs.com/BlueBlueSea/p/16631791.html

相关文章

  • 存储引擎(了解)
    MySQL主要存储引擎Innodb是MySQL5.5版本及之后默认的存储引擎存储数据更加的安全myisam是MySQL5.5版本之前默认的存储引擎速度要比Innodb更快但是我们更加注重......
  • 2022-8-26 jq简单了解
    Query是一个JavaScript函数库。jQuery是一个轻量级的"写的少,做的多"的JavaScript库。jQuery库包含以下功能:HTML元素选取HTML元素操作CSS操作HTML事件函数......
  • JavaScript执行上下文了解
    一、执行上下文是什么        在JavaScript中,有三种代码分类:        1.全局代码(全局中书写的代码)        2.局部代码(常见函数体里的代码)  ......
  • 一文了解SpringBoot如何开启热部署
    一文了解SpringBoot如何开启热部署本专栏将从基础开始,循序渐进,以实战为线索,逐步深入SpringBoot相关知识相关知识,打造完整的云原生学习步骤,提升工程化编码能力和思维......
  • 了解static修饰
    staic静态变量某些特定的数据在内存中只有一份,而且能被一个类的所有实例对象共享。可以使用类名.变量名的形式来访问。也可以先实例化对象在用对象,变量名访问classS......
  • 学习:python 了解多线程
    在计算机处理工作时,有时需要多个任务并行处理进程:是对计算机的程序的依稀运行过程的秒数简单的来说编写完毕的代码,在没有运行的时候,称为程序正在运行着的代码,这个运行......
  • 银行对账单PDF一页拆分多页
    一个页拆分多个页,按照流水Stringbank="{\n"+"\t\"bank\":[\n"+"\t\t{\n"+"\t\t\t\"name\":\"中国农业......
  • 一篇文章带你了解Sql注入
    网络安全学习交流群:755412787常用的mysql语句创建mysql用户#‘host’的值为指定哪些ip可以登录,值为‘%’表示任何人可以登录,值为'localhost'仅允许本机登录CREATEUSE......
  • 一文了解.Net的CLR、GC内存管理
    一文了解.Net的CLR、GC内存管理微软官方文档对内存管理和CLR的概述什么是托管代码?托管代码就是执行过程交由运行时管理的代码。在这种情况下,相关的运行时称为公共......
  • Gerrit了解
    转自:http://www.uml.org.cn/codeNorms/201901033.asp1.介绍Gerrit实际上一个Git服务器,它为在其服务器上托管的Git仓库提供一系列权限控制,以及一个用来做CodeReview是Web......