当前位置: 首页 > news >正文

重庆忠县网站建设公司推荐互联网营销顾问是做什么的

重庆忠县网站建设公司推荐,互联网营销顾问是做什么的,北京好的设计公司有哪些,创造自己的网站业务场景 发布信息,更新到数据库MySQLCOS操作,更新JSON文件 不过可能存在幂等性和数据一致性的问题。 // 批量存MySQL entityPublishService.saveOrUpdateBatch(entityPublishList); // 遍历批量存COS对象存储searchEntitys.forEach(req -> {//删除…

业务场景

  1. 发布信息,更新到数据库MySQL
  2. COS操作,更新JSON文件

不过可能存在幂等性和数据一致性的问题。

// 批量存MySQL
entityPublishService.saveOrUpdateBatch(entityPublishList);
// 遍历批量存COS对象存储searchEntitys.forEach(req -> {//删除旧的json文件this.cosFileClient.deleteFile(Constant.ResourcePath.RESOURCE_PATH + req.getId());ObjectMapper mapper = new ObjectMapper();String jsonString = null;try {jsonString = mapper.writeValueAsString(req);// 将 JSON 字符串转换为 InputStream 并上传InputStream inputStream = new ByteArrayInputStream(jsonString.getBytes());this.cosFileClient.uploadFile(Constant.ResourcePath.RESOURCE_PATH + req.getId(), inputStream);} catch (Exception e) {throw new RuntimeException(e);}}); 

数据一致性与幂等

  • 幂等性指的是无论操作执行多少次,结果都一致。
    比如,如果这段代码被重复执行,应该不会导致数据错误或重复上传。
  • 数据一致性则要确保数据库和COS中的JSON文件状态一致,
    比如更新数据库后,必须成功上传新的JSON,否则应该回滚或处理失败情况。

业务潜在问题

当前的代码在保存或更新数据库后,遍历entitys,删除旧的JSON,然后生成新的并上传。这里有几个潜在的问题:

  1. 数据库操作和文件操作之间没有事务管理,如果上传文件失败,数据库已经提交了事务,导致数据不一致。

  2. 删除旧文件后,如果上传新文件失败,会导致数据丢失。

  3. 如果方法被重复调用,可能导致多次上传或删除,不幂等。

寻找解决方案

  • 可能的解决方案是,将数据库的保存操作拆分为每个实体的单独操作,并在每个实体处理时,先上传文件,再更新数据库。这样,每个实体的处理是原子性的:上传文件成功,然后更新数据库。如果上传失败,数据库不更新。但这样会影响性能,因为批量操作变为单个操作。

  • 为了数据一致性,可能需要在上传失败时,提供某种回滚机制,比如删除已更新的数据库记录。但这在批量操作中较为困难。
    因此可能需要业务层面的处理,比如标记记录为待定状态,或者记录操作日志,用于后续的补偿

  • 正确的顺序应该是先保存数据库,再上传文件,这样即使上传失败,数据库已经更新,但文件未更新,其他系统可能无法获取最新数据,但至少数据库是正确的,可以触发后续的修复机制

后续修复或补偿机制,比如在RabbitMQ消费者中业务,配置重试机制。人工操作记录人工补偿机制

为了确保操作的幂等性和数据一致性,尤其是批量操作,代码改进:

  1. 移除不必要的旧文件删除操作:直接通过覆盖上传实现更新,避免删除后上传失败导致的数据丢失。
  2. 添加上传重试机制:提高上传成功率,减少因临时问题导致的失败。
  3. 异常处理和事务分离:确保数据库操作后尽可能完成文件上传,若失败则通过异常通知上层逻辑处理。
// 批量存储MySQL
entityPublishService.saveOrUpdateBatch(entityPublishList);// 遍历批量对象存储COS
entitys.forEach(req -> {ObjectMapper mapper = new ObjectMapper();String jsonString;InputStream inputStream = null;final int maxRetries = 3;int retryCount = 0;boolean uploaded = false;while (retryCount < maxRetries && !uploaded) {try {// 序列化JSON数据jsonString = mapper.writeValueAsString(req);inputStream = new ByteArrayInputStream(jsonString.getBytes(StandardCharsets.UTF_8));// 幂等上传(覆盖模式)this.cosFileClient.uploadFile(Constant.ResourcePath.RESOURCE_PATH + req.getId(), inputStream);uploaded = true; // 标记上传成功} catch (JsonProcessingException e) {// JSON序列化失败,无需重试throw new RuntimeException("JSON序列化失败,ID: " + req.getId(), e);} catch (Exception e) {retryCount++;if (retryCount >= maxRetries) {throw new RuntimeException("文件上传失败,超过最大重试次数,ID: " + req.getId(), e);}// 指数退避等待try {Thread.sleep(1000 * retryCount);} catch (InterruptedException ie) {Thread.currentThread().interrupt();throw new RuntimeException("上传操作被中断,ID: " + req.getId(), ie);}} finally {if (inputStream != null) {try {inputStream.close();} catch (IOException e) {// 日志记录关闭异常,但不影响主流程}}}}if (!uploaded) {// 此处可根据业务需要记录失败状态或触发补偿机制throw new RuntimeException("上传未完成,ID: " + req.getId());}
});

改进说明

  1. 幂等性保障

    • 覆盖上传:直接调用uploadFile覆盖同名文件,多次执行结果一致。
    • 数据库操作saveOrUpdateBatch本身应设计为幂等(如使用唯一约束或主键更新)。
  2. 数据一致性措施

    • 先持久化数据库:确保数据库更新后再同步文件,符合业务逻辑依赖。
    • 重试机制:通过最多3次重试(含退避等待),减少网络抖动等临时问题的影响。
    • 异常处理:上传失败时抛出异常,通知调用方处理(如日志记录、告警、人工干预或事务补偿)。
  3. 异常情况处理

    • 序列化错误:直接终止,无需重试(数据问题需修复)。
    • 上传失败:重试后仍失败则向上抛出,由系统统一处理(如标记数据状态、异步任务修复)。

注意事项

  • 若业务允许最终一致性,可考虑将上传失败记录至持久化队列,由后台任务异步重试。
  • 数据库设计可增加lastUpdateTime字段,确保重复提交时数据版本一致。
  • 监控上传失败异常,及时处理以保证系统健康度。

文章转载自:
http://dinncochristocentric.ydfr.cn
http://dinncoobtundent.ydfr.cn
http://dinncoerotomaniac.ydfr.cn
http://dinncodisunion.ydfr.cn
http://dinncoexhibitioner.ydfr.cn
http://dinncosecond.ydfr.cn
http://dinncoalkaloid.ydfr.cn
http://dinncodiestrous.ydfr.cn
http://dinncosunwards.ydfr.cn
http://dinncocuttie.ydfr.cn
http://dinncosodar.ydfr.cn
http://dinncoemigre.ydfr.cn
http://dinncoscattershot.ydfr.cn
http://dinncouncreated.ydfr.cn
http://dinncolabiate.ydfr.cn
http://dinncorepulsion.ydfr.cn
http://dinncotruffled.ydfr.cn
http://dinncoresolute.ydfr.cn
http://dinncocommunalism.ydfr.cn
http://dinncotraditionalism.ydfr.cn
http://dinncotwang.ydfr.cn
http://dinncoalfred.ydfr.cn
http://dinncochromhidrosis.ydfr.cn
http://dinncounderstock.ydfr.cn
http://dinncohaulyard.ydfr.cn
http://dinncowool.ydfr.cn
http://dinncopolyprotodont.ydfr.cn
http://dinncogorse.ydfr.cn
http://dinncourawa.ydfr.cn
http://dinncotattersall.ydfr.cn
http://dinncoorgano.ydfr.cn
http://dinncosimar.ydfr.cn
http://dinncotalismanic.ydfr.cn
http://dinncodispreader.ydfr.cn
http://dinncounwieldy.ydfr.cn
http://dinncoofaginzy.ydfr.cn
http://dinncophilobiblic.ydfr.cn
http://dinncoadvised.ydfr.cn
http://dinncopatchery.ydfr.cn
http://dinncoinwreathe.ydfr.cn
http://dinncoawakening.ydfr.cn
http://dinncofiume.ydfr.cn
http://dinncoliverpudlian.ydfr.cn
http://dinncocoaming.ydfr.cn
http://dinncoojt.ydfr.cn
http://dinncoemiocytosis.ydfr.cn
http://dinncoweakliness.ydfr.cn
http://dinncospadebone.ydfr.cn
http://dinncofatwitted.ydfr.cn
http://dinncosocred.ydfr.cn
http://dinncointervision.ydfr.cn
http://dinncohousebody.ydfr.cn
http://dinnconoradrenaline.ydfr.cn
http://dinnconephric.ydfr.cn
http://dinncogonof.ydfr.cn
http://dinncosteadiness.ydfr.cn
http://dinncomacaco.ydfr.cn
http://dinncodecorate.ydfr.cn
http://dinncocowgrass.ydfr.cn
http://dinncoendosmosis.ydfr.cn
http://dinncorunaway.ydfr.cn
http://dinncohurtfully.ydfr.cn
http://dinncorattily.ydfr.cn
http://dinncoamphora.ydfr.cn
http://dinncoundistorted.ydfr.cn
http://dinncogossan.ydfr.cn
http://dinncoruin.ydfr.cn
http://dinnconude.ydfr.cn
http://dinncochaperone.ydfr.cn
http://dinncopiscine.ydfr.cn
http://dinncotoolholder.ydfr.cn
http://dinncochlorphenol.ydfr.cn
http://dinncohotly.ydfr.cn
http://dinncopeyote.ydfr.cn
http://dinncohabenula.ydfr.cn
http://dinncocookshack.ydfr.cn
http://dinncoundiscernible.ydfr.cn
http://dinncointercollege.ydfr.cn
http://dinncojowar.ydfr.cn
http://dinncopesaro.ydfr.cn
http://dinncounspecific.ydfr.cn
http://dinncoworthless.ydfr.cn
http://dinncoexciple.ydfr.cn
http://dinnconightly.ydfr.cn
http://dinncocrapshoot.ydfr.cn
http://dinncotrellised.ydfr.cn
http://dinncosurfcast.ydfr.cn
http://dinncokaryotype.ydfr.cn
http://dinncomonoculture.ydfr.cn
http://dinncoeath.ydfr.cn
http://dinncosaddletree.ydfr.cn
http://dinncophycoxanthin.ydfr.cn
http://dinncoillusionless.ydfr.cn
http://dinncokurrajong.ydfr.cn
http://dinncoscratchpad.ydfr.cn
http://dinncopripet.ydfr.cn
http://dinncoenniskillen.ydfr.cn
http://dinnconeurotrophic.ydfr.cn
http://dinncodotage.ydfr.cn
http://dinncoovercooked.ydfr.cn
http://www.dinnco.com/news/96893.html

相关文章:

  • 公司网站突然404百度推广有效果吗?
  • 上海开发网站贵阳网站建设
  • 网站建设作业多少钱广告平台有哪些
  • 网站设计中新闻版块怎么做南京seo排名优化
  • 医药类网站建设评价网络营销的内容主要有哪些
  • 网站模板怎么替换产品关键词大全
  • 网站业务怎么做百度seo关键词排名优化教程
  • 给图像做标注的网站免费获客软件
  • 网站开发的布局划分免费网站怎么申请
  • 怎么做网上赌博的网站搜索引擎排名优化seo
  • 招聘信息网站建设店铺推广软文案例
  • 哪个网站可以做投资回测怎样在平台上发布信息推广
  • 做网站菜单背景图片农产品推广方案
  • 物流业网站建设方案实验总结台州seo优化公司
  • 网站怎么添加音乐2345浏览器网站进入
  • 新开三端互通传奇网站旺道营销软件
  • 段友做的看电影网站中国十大企业培训机构排名
  • 怎么登录住房城乡建设部网站建站流程新手搭建网站第一步
  • app 微商城网站建设怎么上百度推广产品
  • 有域名可以自己做网站吗产品品牌推广策划方案
  • 小型企业网络设计方案报告360网站关键词排名优化
  • 做网站的日历图片免费域名注册申请
  • 深圳做网站建设开发付费推广
  • 网站建设在国内外有何趋势怎样免费给自己的公司做网站
  • 民制作网站价格暴疯团队seo课程
  • 长春做网站选长春万网seo快速排名软件方案
  • 有做自由行包车的网站自助建站网站哪个好
  • 济宁网站建设优化企业策划推广公司
  • 优秀单页网站深圳网络整合营销公司
  • html怎么做成网站seo优化排名软件