首页
flameking
取消

线上优化经验

从2s到0.1s!一次显著的商品分类树查询优化,够优雅!

订单功能模块

优惠券订单 在多组织架构下加入优惠券系统的必要性 在多组织架构下加入优惠券系统是非常必要的,因为优惠券系统可以帮助组织吸引并留住客户,提高销售额和同行竞争力。通常优惠券系统可以在下列方面提供显著帮助: 促进销售增长:优惠券可以激励客户购买更多的产品或服务,从而实现销售增长。通过在不同的组织之间进行优惠券的分享和兑换,可以进一步扩大销售范围并增加客户数量。 提高品牌忠诚度:优惠券系...

分布式定时任务功能实现

定时任务在智慧停车业务中的必要性 定时任务可以在指定的时间或间隔内周期性地执行一些任务,可以实现很多有用的功能。在智慧停车业务中,定时任务可以用来: 停车场车位信息的更新:定时任务可以周期性地从停车场管理系统获取车位信息,然后更新到智慧停车系统中,确保智慧停车系统中的车位信息与实际情况一致。 费用结算:定时任务可以根据停车场收费标准,结算停车费用,并将费用信息存入数据库。(这块的...

停车计费功能实践

如何设计停车计费功能 在智慧停车场管理系统中,同可用停车位一样计费规则几乎是每辆车进出停车场都会用到,而这种数据俗称称为热数据,读关系库显然不是最优解,引入缓存才是王道。 分布式缓存 缓存作为互联网分布式开发两大杀器之一(另一个是消息队列),应用场景相当广泛,遇到高并发、高性能的案例,几乎都能看到缓存的身影。 从应用与缓存的结合角度来区分可以分为本地缓存和分布式缓存。 我们经常用 ...

支付宝支付功能实践

目标 为了使应用拥有初步的支付功能,我决定引入微信/支付宝的支付功能,后来因为微信的资格审查较为严格,因此决定使用支付宝支付功能,且由于学生个体用户申请商家身份较为麻烦,因此使用支付宝提供的沙箱环境来实现和测试支付功能。 使用支付宝支付产品功能 支付宝专门为个体和组织提供方便好用的支付功能开发工具包,按照支付宝的开发文档就能非常方便和简单的实现自己的支付功能。下面是具体的使用步骤: ...

MySQL为什么有时候会选错索引?

索引统计的更新机制 选择索引是优化器的工作,优化器选择索引的目的是为了寻找一个最优的执行方案,并用最小的代价去执行语句。 在数据库里,扫描行数、是否使用临时表和是否排序等是印象执行代价的因素之一。其中扫描行数越小意味着访问磁盘数据的次数越少,消耗的 CPU 资源就会越少;而如果用到的索引正好是排序字段,由于索引是排好序的,因而能够减少因排序产生的消耗。 而扫描行数是被基数影响, ...

普通索引和唯一索引,应该怎么选择?

查询、更新和插入性能比较 以下面的索引树举例: 查询 执行查询的语句是 select id from T where k=5: 普通索引:从树根一直到叶子节点,查找到满足条件的第一个记录 (5,500) 后,需要查找下一个记录,直到碰到第一个不满足 k=5 条件的记录。 唯一索引:由于索引定义了唯一性,查找到第一个满足条件的记录后,就会停止继续检索。 在查询方面,两者...

事务到底是隔离的还是不隔离的?

事务隔离与行锁与更新操作 之前有提到事务启动时会创建一个视图,即使有其他事务修改了事务,在这个事务中看到的和启动时仍然是一样。但是当事务 A 和事务 B 更新用一条记录时会发生冲突,先者会阻塞后者,后者会陷入等待状态。那么在这种情况下事务 B 先修改了记录 R,那么事务 A 看到的记录 A 还是它刚开启事务的时候的值吗? 此视图非彼视图 我们讲的事务的多并发控制中,事务每次启动时创建的视图...

行锁功过:怎么减少行锁对性能的影响?

什么是两阶段锁 两阶段锁协议(Two-Phase Locking Protocol)是一种并发控制机制,旨在保证事务的隔离性和原子性。这样可以避免死锁的发生,提高数据库的性能和并发度。 该协议分为两个阶段: 增长阶段(Growing Phase):事务在执行过程中,需要获取需要的所有锁。在这个阶段中,事务可以获取锁,但是不能释放锁。 缩减阶段(Shrinking Phase):...

全局锁和表锁 :给表加个字段怎么有这么多阻碍?

MySQL 为什么需要锁 数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。 全局锁 即对整个数据库实例加锁。MySQL 中提供了一个加全局读锁的命令: Flush tables with read lock (在这里就简称 FTWRL) 因为全局锁的常见应用场景就是对整个库做备...