大纲1.营销系统引入MQ实现异步化来进行性能优化2.基于MQ释放优惠券提升系统扩展性3.基于Redis实现重复促销活动去重4.基于促销活动创建事件实现异步化5.推送任务分片和分片消息batch合并发送实现 6.推送系统与用户群体查询逻辑解耦7.查询用户数据以及批量发送推送消息8.线程池封装以及推送系统多线程推送9.推送系统的千万级消息多线程推送10.千万级用户惰性发券代码实现11.指定用户群体发券的代码实现 12.分片消息的batch合并算法重构实现13.百万画像群体爆款商品推送代码实现14.生产环境百万级用户PUSH全链路压测10.千万级用户惰性发券代码实现(1)给全量用户发放优惠券的初版实现(2)给全量用户惰性发放优惠券的优化实现 次,经过两次分桶,这里发送消息的次数从100w次降到10次 int handledBucketCount = 0; List<String> jsonMessageBatch itemDTO.setActivityEndTime(platformCouponMessage.getActivityEndTime()); return itemDTO; }}(2)给全量用户惰性发放优惠券的优化实现一
大纲 1.营销系统引入MQ实现异步化来进行性能优化 2.基于MQ释放优惠券提升系统扩展性 3.基于Redis实现重复促销活动去重 4.基于促销活动创建事件实现异步化 5.推送任务分片和分片消息batch 、全量用户发放优惠券、特定用户推送领取优惠券消息、热门商品定时推送 1.营销系统引入MQ实现异步化来进行性能优化 查询全量用户、创建大量消息、发送大量消息到MQ,这三个操作都可能非常耗时。 优化:使用MQ实现异步化处理后,写库(10毫秒) + 发送一条消息给MQ(10毫秒)。 2.基于MQ释放优惠券提升系统扩展性 MQ主要有三大作用:削峰填谷、异步化提升性能、解耦提升扩展性。 一台营销系统单线程处理1万个推送分片任务,每个任务要写10次MQ,每次10ms,总共需要1000s=20分钟。多台营销系统,对每个分片任务的10个batch发送都可以看成是线程池并发处理的。 1万个分片任务,每个任务要写10次MQ,10万次,每次10ms,总共需要1000000ms=1000s=20分钟左右 //多台营销系统,对每个分片任务的10个batch都是线程池并发写的
以下10个经过实战淬炼的技巧,将带你跳出工具配置的表层,触及PWA开发的本质逻辑。 通过分析用户历史活跃数据,识别其使用应用的高峰时段:社交类应用多在晚间8-10点,工具类应用集中在工作日9-11点,避开凌晨等休息时段避免打扰。 图片与字体等大型资源的加载需注入“感知优化”思维。 采用渐进式图片加载:先展示低分辨率缩略图(体积仅为原图的10%),快速建立视觉锚点,再逐步渲染高清版本;通过响应式图片技术,让浏览器根据设备屏幕尺寸自动匹配最优尺寸,避免小屏设备加载大屏图片造成的资源浪费 定期生成“体验报告”,对比优化前后的用户行为变化:实施缓存策略后,用户平均停留时长是否增加;优化推送内容后,打开率是否提升,用业务指标验证性能优化的价值。
; 对于大分页的场景,可以优先让产品优化需求,如果没有优化的,有如下两种优化方式, 一种是把上一次的最后一条数据,也即上面的c传过来,然后做“c < xxx”处理,但是这种一般需要改接口协议,并不一定可行 select * from _order where shop_id = 1 and order_status in (1, 2, 3) order by created_at desc limit 10 >、NOT EXISTS、NOT IN、NOT LIKE等 案例7、优化器选择不使用索引的情况 如果要求访问的数据量很小,则优化器还是会选择辅助索引,但是当访问的数据占整个表中数据的蛮大一部分时 (一般是20%左右),优化器会选择通过聚集索引来查找数据。 案例9、asc和desc混用 select * from _t where a=1 order by b desc, c asc desc 和asc混用时会导致索引失效 案例10、大数据
NET 10通过底层优化将开销压缩至10%,实测客户数据流水线吞吐量提升15%: var filtered = customers.Where(c => c.IsActive).Select(c => JIT专项优化 . 条时响应时间从150ms降至130ms • 内存分配减少40% 性能实验室:关键指标对比 操作类型 .NET 9耗时 .NET 10耗时 优化幅度 LINQ迭代 83ms 10ms 87.9% 复杂关联查询 兼容性测试:重点关注反射/序列化场景 隐藏性能彩蛋 • 模式匹配优化:switch表达式生成IL代码减少20% • 字符串处理:Span<T>相关API内存拷贝减少50% %实战价值总结 这些看似微小的改进实则是微软对生产环境痛点的精准打击 : • 零代码改造即可享受性能红利 • 内存分配器优化降低GC压力 • 编译器层面的抽象层瘦身 立即升级.NET 10预览版,运行您的LINQ密集型业务代码,见证性能提升的魔法时刻!
正文 今天遇到一个SQL优化的问题,记录下来 测试部门反映,有个功能的查询很缓慢,需要支持排查下 首先描述下具体的问题 数据库中一张表的大概有700多条记录,业务需要模拟一个类似属性树形的数据结构 ORDER BY t.created_time DESC 在重构后的sql中,可以看到我们排序之后的记录添加一个序列,然后获取序列的第一条来作为我们现实的记录,然后将in改为exists,这样优化后的查询就变得效率很高了
本文作者:IMWeb 结一 原文出处:IMWeb社区 未经同意,禁止转载 seo本身涉及范围非常广,所包含的知识也是非常值得深入研究的一个方向,本文仅从重构侧出发聊聊最近做的一些seo实战。
最近,因为项目时间不紧的原因,就对项目的某些页面进行了内存观察,发现了两处优化点.特意记录下来 1.单例引发的内存泄漏 我在项目中涉及到的一个单例是这样的 object LiveCenter {
本文作者:IMWeb 结一 原文出处:IMWeb社区 未经同意,禁止转载 seo本身涉及范围非常广,所包含的知识也是非常值得深入研究的一个方向,本文仅从重构侧出发聊聊最近做的一些seo实战。
搜索超参数空间以优化超参数需要明确以下方面: 估计器 超参数空间 交叉验证方案 打分函数 搜寻或采样方法(网格搜索法或随机搜索法) 优化模型的常见方法包括 网格搜索法,随机搜索法,模型特定交叉验证, 信息准则优化。 使用网格搜索法或随机搜索法可以对Pipeline进行参数优化,也可以指定多个评估指标。 ? ? 三, 模型特定交叉验证 一些特定的模型,sklearn构建了一些内部含有交叉验证优化机制的估计器。 它们主要是在linear_model模块。 linear_model.LassoLarsIC 采用了信息准则进行优化。
Recovery速度优化 众所周知,索引恢复是集群启动过程中最缓慢的过程,集群完全重启,或者Master节点挂掉之后,新选的Master也有可能执行这个过程。 官方也一直在优化索引恢复速度,陆续添加了syncid和SequenceNumber。
在执行器中,mysql会对sql语句进行优化,调整三个字段的顺序,满足最左前原则。 optimizer_trace = "enabled=on", end_markers_in_json = ON; SELECT * FROM student WHERE stu_age > 10 group by 和order by 优化点是一样的,默认会按照字段排序的,如果不需要排序 则可以在group by 之后加上order by null,省去排序的消耗。 文件排序 using filesort 在上面优化中,发现在mysql中排序分为文件排序和索引排序,在无法使用索引排序的情况下,我们就得考虑如何优化文件排序了。 的,我们现在设置下sort_buffer_size大小,然后再trace下结果: // 修改默认值,记得测试完之后修改回默认值(1m) set max_length_for_sort_data = 10
从50ms到<10ms:IM系统性能优化实战在IM系统中,响应时间直接影响体验。本文介绍AQChat如何将消息发送响应时间从50ms优化到<10ms。 一、性能瓶颈分析优化前的问题1.同步处理阻塞消息广播、持久化、AI处理都在主线程同步执行数据库写入耗时20-30ms消息广播耗时10-20ms总响应时间约50ms2.频繁的数据库查询每次发送消息都查询用户信息 =null&&messageIds.contains(msgId);}}优化效果:用户信息查询:从数据库5-10ms降到Redis<1ms房间信息查询:从数据库5-10ms降到Redis<1ms消息去重 :从数据库5-10ms降到Redis<1ms四、优化方案三:Protobuf序列化优化核心思路:使用二进制协议替代JSON,减少体积、提升速度。 替代JSON减少体积,提升速度4.数据结构优化RedisHash存储房间信息RedisSet实现消息去重优化效果:响应时间:从50ms降到<10ms(实际<5ms)吞吐量:提升10倍以上数据库压力:降低
Dubbo 配置实战 快速入门 dubbo 建议看这篇文章是在学习了快速入门 dubbo 那篇文章的基础上来学习 配置说明 文档地址 https://dubbo.apache.org/zh/index.html
虽然 SQL 查询优化的技术有很多,但是大方向上完全可以分成 物理查询优化 和 逻辑查询优化 两大块。 物理查询优化是通过 索引 和 表连接方式 等技术来进行优化,这里重点需要掌握索引的使用。 关联查询优化 # 3.1 数据准备 # 分类 CREATE TABLE IF NOT EXISTS `type` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT ` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `card` INT(10) UNSIGNED NOT NULL, PRIMARY KEY (`bookid`) ORDER BY b,c /*对于排序来说,多个相等条件也是范围查询*/ # 5.3 案例实战 ORDER BY 子句,尽量使用 Index 方式排序,避免使用 FileSort 方式排序。 # 9.2 前缀索引对覆盖索引的影响 结论: 使用前缀索引就用不上覆盖索引对查询性能的优化了,这也是你在选择是否使用前缀索引时需要考虑的一个因素。 # 10.
几毫秒的优化累积起来就能让用户感受到明显的性能提升。下面这些技术都是在生产环境跑出来的经验,不需要重构代码实施起来也相对简单并且效果显著。 TensorRT 和 ONNX Runtime 在处理固定形状时能做更激进的优化。 图优化可以开到最高档,但要验证数值 让运行时自己去融合算子、选更优的 kernel,这个收益基本是白来的。 API 层面最好把 shape 和 dtype 固定下来,或者至少让调用方知道优化过的范围。这样生产请求才能稳定落在最优路径上。 开了融合或量化之后,精度的自动化回归测试必不可少。 总结 低延迟不靠黑科技就是一堆小优化叠起来:形状固定、减少拷贝、更好的 kernel、graph capture、运行时零意外。每个单拎出来可能只省几毫秒,但加起来用户就能感受到"快"。
占用率内存占用网络吞吐率100MB2.3秒45%150MB43MB/s500MB11.8秒68%580MB42MB/s1GB24.5秒78%1.2GB41MB/s5GB125秒82%3.8GB40MB/s10GB 优化数据结构大页面失效配置不当无法使用大页面正确配置实战案例:mmap的正确使用姿势我们有个日志分析服务,需要处理几十GB的日志文件。 监控关键指标我们建立了完整的监控体系:监控指标正常范围告警阈值采集频率Page Fault Rate<100/s1000/s10秒Swap使用率0%5%1分钟内存碎片率<10%30%5分钟TLB命中率99% ,后优化:不要凭感觉,要看数据一次只改一个地方:方便定位问题关注整体而非局部:局部最优不等于整体最优最终效果经过这一轮优化,我们的文件服务脱胎换骨:优化项优化前优化后提升倍数10GB文件传输时间崩溃30 如果你也有类似的优化经验,欢迎留言交流。特别是关于大文件处理和内存优化的,我们可以互相学习!
geolocation.off('locationChange'); this.stopContinuousTask(); }) .margin({ top: 10 从功耗角度考虑,应用应该避免过多使用长时任务,针对必须使用长时任务的场景,也可以优化任务执行过程,减少设备功耗。 以下是一些优化建议:对定位要求不太高的场景可以适当调整上报时间间隔和上报距离间隔,减少更新频率。尽可能的减少网络请求次数和减小网络请求时间间隔。 总结合理的选择和使用后台任务对于优化用户体验,减少性能消耗非常重要。以下表格对比总结了各类后台任务的概念、适用场景以及任务执行过程中的应用状态。
索引从物理上可以分为:聚集索引,非聚集索引 从逻辑上可以分为:普通索引,唯一索引,主键索引,联合索引,全文索引 索引优化策略 不要在索引列上进行运算或使用函数 在列上进行运算或使用函数会使索引失效,从而进行全表扫描 table where b = '1' and a = '1' 3.优化查询,避免出现filesort select * from table where a = ? order by c 可以建立联合索引(a, b, c) 如果索引中有范围查找,那么索引有序性无法利用,如 select * from table where a > 10 order by b 索引( and b = 5 -- 没有使用索引 where b = 3 -- 使用了a列 where a = 3 and c = 4 -- 使用了a b列 where a = 3 and b > 10 图解: EXPLAIN 实战-1 你确定真正理解联合索引和最左前缀原则? Java识堂 一个有干货的公众号 ---- ?
然而,如果不进行优化,RecyclerView 可能会导致 UI 卡顿、内存泄漏等问题。本文将介绍一些优化技巧,帮助你更好地使用 RecyclerView。 RecyclerView 可以大大简化开发过程,但是如果不进行优化,它可能会导致一些性能问题。下面将介绍一些优化技巧,帮助你充分发挥 RecyclerView 的性能。 优化技巧 对于 RecyclerView,我们可以采用以下优化技巧: 1. 使用 DiffUtil DiffUtil 是计算两个列表之间差异的工具类,可帮助 RecyclerView 局部刷新数据。 结论 通过本文,我们介绍了一些优化 RecyclerView 的技巧,包括使用 DiffUtil、使用 ViewHolder、使用异步加载、合理使用布局管理器、使用数据绑定、减少布局中嵌套层级、设置 RecyclerView 我们可以根据实际需求选择合适的优化方案,提升 RecyclerView 的性能,使其更加流畅。