码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 如何写好CRUD?


    目录

    前言

    一、CRUD

    1、增加

    2、查询

    3、修改、删除


    前言

    CRUD分为两部分:读、写。 其中「读」是:查询,「写」是:增加、删除、修改。

    - 针对「读」的编码是相对而言比较容易的,我们需要留意一下查询性能;

    - 针对「写」的编码就更需要用心了,因为需要考虑并发。

    一、CRUD

    1、增加

    增加是比较麻烦点的,因为你需要考虑幂等。此处,我是借助数据库的唯一索引实现幂等操作(这种方式也可以用作MQ处理幂等)。

     

    步骤:

    1、先从数据库中查询,如果已经查到,说明该记录数据库已经存在,则return;

    -- 这一步可以解决大部分的并发问题,但是有一种场景解决不了:数据库在「可重复读」隔离级别下,事务1已经插入数据库但是事务1还没有commit,此时事务2来读的时候是读取不到的,此时138行的info为null(实际事务1已经把数据插入到了数据库),那么事务2将再次执行一个插入操作。

    2、为了解决上面的场景,我们给数据库中的auditInfoId(雪花算法计算出的唯一值)添加唯一索引,那么当事务2执行插入操作,就会报DuplicateKeyException异常,我们catch住,做个日志输出即可。

    2、查询

    1、留意输出一下日志;

    3、修改、删除

    我们一般用的都是「逻辑删除」,此处把删除和修改归为一类。

    步骤:

    1、修改之前,我们需要确保数据库中该数据是否真实存在?

    2、查询出结果之后,将该数据的version记录下来,使用乐观锁的方式进行修改;

    3、最后,再执行我们的修改操作。

    思考:

            以上代码的业务背景是:管理员来对工单进行审核(修改),并发量很低。并且,你可以理解为是「非计数性的修改」(非++、--操作)。

            扩展点来想:如果是几千个用户,对一类商品进行下单,此处代码是来处理库存,那么就是「计数性的修改」(可以理解是++、--操作),那么上面的代码肯定不符合要求。

            我们必须搞明白:并发是针对临界资源的,也可以理解是共享资源。根据用户行为来分析:如果几千甚至上万个用户只是来修改各自的用户名、性别,那么这些数据对整个系统而言都是用户私有的,用户数量多造成QPS高但是并发不是很高(因为修改自己的用户名等不涉及共享资源);如果是几千甚至上万个用户来抢10个手机,那么10就是共享资源,这时候的修改操作可不再是上图简单的实现了。

  • 相关阅读:
    复旦、人大等发布大五人格+MBTI测试 角色扮演AI特质还原率达82.8%
    UDS知识整理(五):安全访问——0x27服务
    Qt基础教程:数据类型与容器
    制作和合入git补丁
    【C语言】strcpy等string函数和memcpy等memory函数的实现,经典方法
    Java基础知识第七讲:Java异常处理与日志打印
    Java应用程序中如何实现FTP功能 | 代码示例和教程
    使用 Docker 部署高可用 MongoDB 分片集群
    22-09-04 西安 谷粒商城(01)MySQL主从复制、MyCat读写分离、MyCat分库分表
    提高篇(三):交互设计与用户输入:打造更具互动性的Processing作品
  • 原文地址:https://blog.csdn.net/qq_43783527/article/details/126257197
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号