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

欢迎回来请牢记网站域名微信网站制作公司哪家好

欢迎回来请牢记网站域名,微信网站制作公司哪家好,工程造价定额在哪查,html交易网站设计实例目录 批量异步、回调缓存预取池化并行锁粒度索引大事务海量数据 批量 批量思想#xff1a;批量操作数据库 优化前#xff1a; //for循环单笔入库 for(TransDetail detail:transDetailList){ insert(detail); } 优化后#xff1a; batchInsert(transDetailList); 异步、回… 目录 批量异步、回调缓存预取池化并行锁粒度索引大事务海量数据 批量 批量思想批量操作数据库 优化前 //for循环单笔入库 for(TransDetail detail:transDetailList){ insert(detail); } 优化后 batchInsert(transDetailList); 异步、回调 异步思想耗时操作考虑放到异步执行 耗时操作考虑用异步处理这样可以降低接口耗时。 将接口的耗时操作或IO操作改为异步执行可以让接口在等待耗时操作完成的同时继续处理其他请求提高并发处理能力。可以使用 CompletableFuture、CompletableFuture、Async 注解等方式实现异步调用。 事件回调思想拒绝阻塞等待。 如果你调用一个系统B的接口但是它处理业务逻辑耗时需要10s甚至更多。然后你是一直阻塞等待直到系统B的下游接口返回再继续你的下一步操作吗这样显然不合理。 我们参考IO多路复用模型。即我们不用阻塞等待系统B的接口而是先去做别的操作。等系统B的接口处理完通过事件回调通知我们接口收到通知再进行对应的业务操作即可。 缓存 空间换时间思想恰当使用缓存。 在适当的业务场景恰当地使用缓存是可以大大提高接口性能的。缓存其实就是一种空间换时间的思想就是你把要查的数据提前放好到缓存里面需要时直接查缓存而避免去查数据库或者计算的过程。 这里的缓存包括Redis缓存JVM本地缓存memcached或者Map等等。 预取 预取思想提前初始化到缓存 预取思想很容易理解就是提前把要计算查询的数据初始化到缓存。如果你在未来某个时间需要用到某个经过复杂计算的数据才实时去计算的话可能耗时比较大。这时候我们可以采取预取思想提前把将来可能需要的数据计算好放到缓存中等需要的时候去缓存取就行。这将大幅度提高接口性能。 池化 池化思想预分配与循环使用 大家应该都记得我们为什么需要使用线程池 线程池可以帮我们管理线程避免增加创建线程和销毁线程的资源损耗。 如果你每次需要用到线程都去创建就会有增加一定的耗时而线程池可以重复利用线程避免不必要的耗时。 池化技术不仅仅指线程池很多场景都有池化思想的体现它的本质就是预分配与循环使用。 比如TCP三次握手大家都很熟悉吧它为了减少性能损耗引入了Keep-Alive长连接避免频繁的创建和销毁连接。当然类似的例子还有很多如数据库连接池、HttpClient连接池。 以下是一些常见的应用池化思想的应用场景和实践方法 连接池数据库连接池是应用池化思想的一个典型应用。在项目中使用连接池可以避免频繁地创建和销毁数据库连接提高数据库访问的性能。常见的连接池实现有 Apache Commons DBCP、HikariCP 等。 线程池线程池是管理和复用线程资源的一种机制。在项目中使用线程池可以避免频繁地创建和销毁线程提高线程的利用率和性能。Java 提供了 ThreadPoolExecutor 类来实现线程池可以根据具体需求进行配置和使用。 对象池对象池是管理和复用对象资源的一种机制。在项目中使用对象池可以避免频繁地创建和销毁对象提高对象的利用率和性能。常见的对象池实现有 Apache Commons Pool 等。 缓存池缓存池是将数据或计算结果缓存起来供后续使用的一种机制。在项目中使用缓存池可以减少重复计算的开销提高系统的响应速度。常见的缓存池实现有 Redis、Ehcache 等。 资源池除了上述具体的池化实现外还可以根据项目的需求创建其他类型的资源池如连接资源池、文件资源池等。通过池化思想可以有效地管理和复用资源提高系统的性能和稳定性。 并行 远程调用由串行改为并行 假设我们设计一个APP首页的接口它需要查用户信息、需要查banner信息、需要查弹窗信息等等。如果是串行一个一个查比如查用户信息200ms查banner信息100ms、查弹窗信息50ms那一共就耗时350ms了如果还查其他信息那耗时就更大了。其实我们可以改为并行调用即查用户信息、查banner信息、查弹窗信息可以同时并行发起。 锁粒度 在高并发场景为了防止超卖等情况我们经常需要加锁来保护共享资源。但是如果加锁的粒度过粗是很影响接口性能的。 下面是一些常见的方法来限制锁的粒度 细粒度锁使用更小的锁范围来减少锁竞争。例如可以将锁粒度从整个对象降低到对象的某个字段或方法上。 分离锁将数据结构拆分成多个部分并为每个部分使用独立的锁。这样不同部分之间的操作可以并行执行减少锁竞争。 读写分离锁对于读多写少的场景可以使用读写锁ReadWriteLock来实现。读操作可以共享锁而写操作需要独占锁。这样可以提高并发性能因为多个读操作可以同时进行而写操作会互斥。 锁分段对于数据结构较大且操作并发较高的情况可以将数据结构分成多个段并为每个段使用独立的锁。这样不同段之间的操作可以并行执行减少锁竞争。 无锁算法对于特定的场景可以使用无锁算法来替代锁。无锁算法利用原子操作和无锁数据结构实现线程安全的并发访问。 乐观锁在某些情况下可以使用乐观锁机制避免使用独占锁。乐观锁假设并发冲突较少通过版本号或时间戳等机制来检测和解决并发冲突。 减少锁持有时间尽量减少在锁内的操作时间将非必要的操作移到锁外。这样可以缩小锁的范围减少锁竞争。 索引 提到接口优化很多小伙伴都会想到添加索引。没错添加索引是成本最小的优化而且一般优化效果都很不错。 索引优化这块的话一般从这几个维度去思考 你的SQL加索引了没 你的索引是否真的生效 你的索引建立是否合理 关于索引原理可以参考索引原理 大事务 避免大事务问题 为了保证数据库数据的一致性在涉及到多个数据库修改操作时我们经常需要用到事务。而使用spring声明式事务又非常简单只需要用一个注解就行Transactional 所谓大事务问题就是就是运行时间长的事务。由于事务一致不提交就会导致数据库连接被占用即并发场景下数据库连接池被占满影响到别的请求访问数据库影响别的接口性能。 大事务引发的问题主要有接口超时、死锁、主从延迟等等。因此为了优化接口我们要规避大事务问题。我们可以通过这些方案来规避大事务 RPC远程调用不要放到事务里面 一些查询相关的操作尽量放到事务之外 事务中避免处理太多数据 海量数据 海量数据处理考虑NoSQL 之前看过几个慢SQL都是跟深分页问题有关的。发现用来标签记录法和延迟关联法效果不是很明显原因是要统计和模糊搜索并且统计的数据是真的大。最后跟组长对齐方案就把数据同步到Elasticsearch然后这些模糊搜索需求都走Elasticsearch去查询了。 我想表达的就是如果数据量过大一定要用关系型数据库存储的话就可以分库分表。但是有时候我们也可以使用NoSQL如Elasticsearch、Hbase等。
http://www.hkea.cn/news/14387749/

相关文章:

  • 网站优化三要素湖北网站建设模板下载
  • 网站排版深圳制作手机网站
  • 虚拟主机代理商的网站打不开了怎么办杭州网站建设杭州
  • 外汇平台 网站开发西安做建站的公司
  • 网站建设基础知识及专业术语十句经典广告语
  • 合肥网站优化搜索网站淘客怎么做
  • 比较流行的网站建设技术有哪些搜索引擎营销的原理
  • 苏州无锡外贸网站建设一个网站建设的组成
  • 商务网站建设的调研流程wordpress织梦扩展
  • 徐州建设工程交易网站四川网站建设的公司排名
  • 做网站相关人员网页设计需要会什么
  • 新网站的站点验证云南网站建设公司排名
  • 看动漫是怎么做视频网站租外国服务器做的网站要备案吗
  • 查询网站mx记录长沙php的网站建设公司
  • 湖南网站营销优化开发瑞安学校网站建设
  • 营销型网站建设主要教学内容wordpress更新后台反应慢
  • wordpress添加网站图标汕头网站制作找谁
  • .net 网站自动登录不需要iis的网站开发
  • 用邮箱地址做网站域名好吗企业网站建设的特点
  • 前端做商城网站需要多久做网站用笔记本做服务器
  • php网站服务器架设wordpress轮播图修改
  • wordpress做网站手机上海外贸公司27号
  • 做餐厅logo用什么软件网站外贸平台网站的营销方式
  • 做木质的网站wordpress 上传权限
  • 网站建设平台选用主动创新网站内容建设
  • 网站 系统设置网页制作自学教程视频
  • 怎么做网站投放广告做网站制作的摘要
  • 军人运动会官方网站建设目标凉山住房和城乡建设局网站
  • 模板云网站建设中国个人优秀网站
  • 宁夏建设技术职业学院官方网站比格设计网站官网