如何注册申请chn网站,哪个网站做网站方便,北京企业网站推广价格,网站开发 运行及维护空间换时间
计算机程序中最大的矛盾是空间和时间的矛盾#xff0c;那么#xff0c;从这个角度出发逆向思维来考虑程序的效率问题#xff0c;我们就有了解决问题的第1招–以空间换时间 合理使用缓存就是一个很好的例子#xff0c;针对一些频繁使用且不频繁变更的数据#…空间换时间
计算机程序中最大的矛盾是空间和时间的矛盾那么从这个角度出发逆向思维来考虑程序的效率问题我们就有了解决问题的第1招–以空间换时间 合理使用缓存就是一个很好的例子针对一些频繁使用且不频繁变更的数据可以提前缓存起来需要时直接查缓存避免频繁地查询数据库或者重复计算。这里的缓存形式多样可以是R2M也可以是本地缓存、memcached、Map、… 需要注意的事这里用了合理二字因为空间换时间也是一把双刃剑需要综合考虑你的使用场景毕竟缓存带来的数据一致性问题也挺令人头疼。
串行改并行
串行就是当前执行逻辑必须等上一个执行逻辑结束之后才执行并行就是两个执行逻辑同时进行所以并行相对来说就比较节省时间当然这种方式的前提是多个步骤间没有相互依赖。实现方式方式如多线程、协程、…
批处理
总所周知I/O耗时是影响接口响应速度的重量级嘉宾。这时候批量思想就显得尤为重要。比如你需要查询10个用户的爱好你应该是一次查询这些用户的所有爱好再按照用户分类。任何在循环中执行的CRUD都值得高度警惕
异步
对于当前接口返回结果没有影响的逻辑块我们可以考虑异步执行这也是解耦思想的体现。如MQ、协程、… 但并不是说异步越多越好与之相伴的逻辑复杂度上升可能会导致排查问题难度增加另外可能引起的数据时序混乱、数据延时如何保证数据一致性等也是令人头疼的问题
预处理
就是把可能要用到的数据提前计算/处理好结果并存储下来要用时只需要直接查询即可而不是要用时才去计算。这种思想生活中随处可见比如夏天即将来临工厂都会提前多生产一些短裙、短袖而不是等用户下单后才开始生产 值得一提的是预处理出来的数据可能存在时效性问题所以这种方法更适用于那种变化不频繁、实时性要求不那么高的场景
池化思想
池化思想的本质是预分配。预先将资源和连接申请到手使用时即拿即用节约了资源创建/销毁占用的时间。比如常见的线程池、内存池、连接池、…
上下文传递
由于分支交叉和多人协作不可避免的出现多次查询同一资源的问题。我们可以只查询一次通过上下文的方式往下携带避免多次查询的开销
最简思想
这常常是最容易让人忽略的细节。很多时候实际需要三五个字段而接口编写者为了方便直接一股脑儿返回几十上百个字段。增加I/O开销和带宽消耗 在编写接口的途中我们应该时刻记得:非必要不查非必要不返。
SQL治理
~待续