首页 > 代码库 > 一些心得(持续更新)

一些心得(持续更新)

数据库查询:

数据库查询对并发处理和事务处理都有很大影响;

查询性能越好,随并发量上升导致的性能下降的影响越小;

查询性能越好,受其他事务排他锁的影响越小;

总之,要解决超时、死锁等问题,优化查询性能,缩短事务时间(最好不用事务)是最根本办法

 

(非原创,引用自网络)用两个例子看清楚分布式和集群的区别:

例子1:

如果一个任务由10个子任务组成,每个子任务单独执行需1小时,则在一台服务器上执行改任务需10小时。   采用分布式方案,提供10台服务器,每台服务器只负责处理一个子任务,不考虑子任务间的依赖关系,执行完这个任务只需一个小时。(这种工作模式的一个典型代表就是Hadoop的Map/Reduce分布式计算模型)    而采用集群方案,同样提供10台服务器,每台服务器都能独立处理这个任务。假设有10个任务同时到达,10个服务器将同时工作,10小后,10个任务同时完成,这样,整身来看,还是1小时内完成一个任务!

例子2:

一堆机器堆在这儿,具备一定的相同的功能属性,就可以叫集群   分布式的话,应该是具备分布式特性的一类系统

集群的作用:负载均衡,错误恢复

集群式资源整合,分布式是计算能力整合

集群=聚合,分布式=组合

 

减少线程切换:

几乎所有IO操作(包括磁盘和网络)都产生线程切换
Mutex, AutoResetEvent, Sleep等方法会产生线程切换
在应用服务化的时代,网络服务接口常常被当成本地方法使用,当这样的接口被放入循环,递归中时,线程切换的时间消耗往往会超过要执行的逻辑本身+网络传输的开销
如何避免:
所有的IO操作用异步模式(这个比较难)
对会产生IO的接口使用特别小心
封装IO接口,适当引入缓存
设计时提供批量和单个接口,减少IO次数
……
 
降低嵌套循环:
用hash表,字典,分组等手段优化嵌套,把多层循环变成多次循环(复杂度由高次方变成一次方)
 
防暴力破解:
MD5(x+MD5(y));y.length>=8
 

一些心得(持续更新)