java运行内存计算_java计算金额是放在内存中计算还是在sql中计算好呢?
严格来说,数据库上的金额这个字段根本就不应该被直接set.
为什么这么说呢,因为在这个操作完成以后,实际上数据库要承载的信息被丢失了,丢失了那一部分呢?丢失了修改前的数值,而且是永久丢失了,再也找不回来了,这里就产生了一个信息上的…《黑洞》,信息永远丢失了。
更加科学的设计,是设计一张基于有效时间的拉链表,每次金额变化的时候,写入一条新纪录,并将产生这次金额变化的原因记录下来备查。
如果再扩展一下,将金额变化的增加和减少分别纪录到两个字段,就构成会计学上的借贷记账法,如果再加上科目记账体系,就是复式记账法。
复式记账法的优点在于记账过程是可逆的,而且可以自动进行稽核处理,确保记账过程是准确的,这个准确性是通过会计学的理论来保证和证明的。
总的来说,涉及金额计算的时候,最理想的是使用复式记账法来记账处理,次之采用借贷记账来处理,再次之采用单边流水账拉链表来处理,最差的就是直接使用sql语句update 金额。
至于是将计算方法放在java里面还是写存储过程,这个已经是很枝节的问题了。
先定存储方案,再来定计算方案,而不是反过来。
------------------补充的分割线-------------
说个自己曾经做过的蠢事。
当年做一个系统,其中一步需要先删除一部分数据,再重新计算。于是就有了delete from aaa 类似这样的脚本,鬼使神差,那天改的程序没有加上where条件,也可能是加班加多了脑子糊涂了,然后就把程序下发下去了,当时是cs的程序,客户端的。然后客户一执行,业务数据表的数据就消失的干干净净了。
这是真实版本的删库了。下一步就该跑路了。
多亏当时的客户比较有经验,知道你们小年轻不靠谱,操作之前自己把数据库做了个备份,发现了问题赶紧反馈了回来,才让我谈过了跑路的宿命。
在此之前我是不理解为啥数据库要设计那么多角色,要设计那么复杂的权限控制的,凭啥不让执行delete命令呢。吃了这次亏以后,如同当头一棒,才明白为啥控制限制数据库用户的权限,不能把啥权限都给他。
数据库的访问权限固然是方便了开发者,但另一方面也把开发者陷入到危险之中,最安全的开发方式就是开发者只调用报文和数据库交互,而不去直接接触数据库本体。物理隔离是最有效的安全控制手段。
这一段说的有点跑题了。
java运行内存计算_java计算金额是放在内存中计算还是在sql中计算好呢?相关推荐
- java中的subString与SQL中的subString(作为常识应该记住的)
java中 "Hello World".substring(6,11); 含义[6,11) 其中两个数字代表索引,索引位置从0开始. SQL中 substring(" ...
- java 32位_Java知识点:创建节约内存的JavaBean
一个Java对象到底有多大? 想要精确计算一个Java对象占用的内存,首先要了解Java对象的结构表示. Java对象结构 一个Java对象在Heap的表示,可以分为三部分: Object Heade ...
- java sqlserver 二进制_Java将图片资源以二进制的形式保存到Sqlserver数据库中
如何使用Java语言将图片资源以二进制的形式保存的数据库中 在sqlserver中创建表 use MyDb1 go create table SaveImg( id varchar(10) prima ...
- 计算贷款的每月支付额。程序要求用户输入贷款的年利率、总金额 和年数,程序计算每月支付金额,并将结果显示输出。计算贷款的月支付额公式如下:(Java课本练习题 题目要求 )
2.7 package booksTest;import java.util.Scanner;public class p34_2_7 {public static void main(String[ ...
- java 10000阶乘_Java ForkJoinPool: 3秒计算100万的阶乘
问题背景&思路 如果需要计算100的阶乘,那应该怎么做? 方法1: for循环(默认,单线程) 方法2: 多线程,MapReduce思想 main线程开启多个子任务(个数=CPU核心数),放到 ...
- java 时间戳最大值_Java中在时间戳计算的过程中遇到的数据溢出问题解决
背景 今天在跑定时任务的过程中,发现有一个任务在设置数据的查询时间范围异常,出现了开始时间戳比结束时间戳大的奇怪现象,计算时间戳的代码大致如下. package com.lingyejun.authe ...
- java 求商_Java程序计算商和余数
Java程序计算商和余数 在该程序中,您将学习从Java中给定的被除数和除数计算商和余数. 示例:计算商和余数 public class QuotientRemainder { public stat ...
- java 线性计算器_java版科学计算器,支持表达式计算
<java版科学计算器,支持表达式计算>由会员分享,可在线阅读,更多相关<java版科学计算器,支持表达式计算(12页珍藏版)>请在人人文库网上搜索. 1.程序设计综合设计题目 ...
- java算小数_Java 小数精确计算问题
Java 小数精确计算问题 System.out.println(2.00 -1.10);//0.8999999999999999 上面的计算出的结果不是0.9,而是一连串的小数.问题在于1.1 这个 ...
最新文章
- GinWin命令控制台执行指令
- 使用jquery图表插件jqplot之折线图
- phpcms 后台设置 posid 推荐位(支持多选) - 教程篇
- Java集合框架之四大接口、常用实现类,java基础面试笔试题
- 绝版经典《Linux与UNIX Shell编程指南》中文文字PDF版
- 卡分区 shell脚本_分享一个实用脚本--一键获取linux内存、cpu、磁盘IO等信息
- java去除网页中的广告和导航等信息_**css+html纯css怎样去除导航子菜单中的默认背景?**...
- 【Flink】(04)Apache Flink 漫谈系列 —— 实时计算 Flink 与 Alibaba Cloud Realtime Compute 剖析
- MacOS - MacBook - 推荐工具收集
- bmvc哪个出版社出版_在出版饮食上
- 密西根州立大学计算机排名,密歇根州立大学MSU(Michigan State University)计算机科学Computer Science专业排名第91位(2021年THE世界大学商科排名)...
- 基于VC++的WEB浏览器的实现
- RS232和TTL电平
- Heading/Pitch/Roll与Omega/Phi/Kappa简单介绍
- 在线使用的时间管理工具
- java俄罗斯方块七中图形类_shell脚本俄罗斯方块--代码真正详解
- 为什么论文降重没有效果?
- CocosCreator 2.4.1版本 打包微信抖音小游戏CDN配置问题
- 基于人脸面部检测的口罩识别系统
- python数据拟合固定参数_固定某些参数的双峰高斯分布拟合