1.只有一件商品,1w个人来抢,怎么办?
1)java:线程同步,关键字syncrinized,该方法想实现多人都能看到这个商品,还都能抢,性能很差。
2)数据库:乐观锁,在现有表中添加一个版本号字段,不锁表,所有事务都可以进行,在ab线程取数据的时候获取版本号1,a线程先运行完,提交事务的时候检查获取到的版本号是否与现有版本号一致,一致则进行修改,并对版本号加一,变为2,此时b线程提交,发现版本号与自己取到的不一样,则提示提交失败。
2.oracle数据在超过100w的时候,性能会变差,在大数据量的情况下,如何设计表?
做分表,(表名字不一样,但是结构完全一样)
1)按手机号分:130一个表,131一个表
2)用oracle表拆分机制做
3)交易系统,可以按时间轴分表
首先要了解高并发的的瓶颈在哪里?
1、可能是服务器网络带宽不够
2.可能web线程连接数不够
3.可能数据库连接查询上不去。
根据不同的情况,解决思路也不同。
-
像第一种情况可以增加网络带宽,DNS域名解析分发多台服务器。
-
负载均衡,前置代理服务器nginx、apache等等
-
数据库查询优化,读写分离,分表等等
最后复制一些在高并发下面需要常常需要处理的内容:
-
尽量使用缓存,包括用户缓存,信息缓存等,多花点内存来做缓存,可以大量减少与数据库的交互,提高性能。
-
用jprofiler等工具找出性能瓶颈,减少额外的开销。
-
优化数据库查询语句,减少直接使用hibernate等工具的直接生成语句(仅耗时较长的查询做优化)。
-
优化数据库结构,多做索引,提高查询效率。
-
统计的功能尽量做缓存,或按每天一统计或定时统计相关报表,避免需要时进行统计的功能。
-
能使用静态页面的地方尽量使用,减少容器的解析(尽量将动态内容生成静态html来显示)。
-
解决以上问题后,使用服务器集群来解决单台的瓶颈问题。