1
wiviam 2014-11-19 21:19:24 +08:00
不错,学习了~
|
2
caixiexin 2014-11-19 21:40:38 +08:00
最近工作上刚好也涉及到这块。。
请问数据库方面的应对策略一般是啥? |
3
pyKun 2014-11-20 10:34:20 +08:00
这三点就是起步...
|
4
66450146 2014-11-20 10:36:28 +08:00
翻到最后居然没有招聘……
|
5
canesten 2014-11-20 10:52:29 +08:00 1
Concurrent是并发
Parallel才是并行 没有吐槽下去的动力了 |
6
yakczh 2014-11-20 11:01:36 +08:00
cache主要是失效策略和数据源
if( 没有cache 有效 (判断各种失效策略 ){ 获取 cache 里的数据 }else { 根据请求参数获取数据源 ... (各种数据源读取) 更新 cache } 返回 cache 如果这种代码到处写,感觉很丑陋,有没有比较统一的设计模式 ? |
8
incompatible 2014-11-20 11:04:47 +08:00
getCommits这里对concurrent的使用方式并不是一个良好的实践
试想如果前端向后段发送了大量的getCommits请求,且每个请求中的sha数目都超过了8,那么就会生成N*8个新线程。这样会导致jvm性能下降,也可能引发由线程栈爆满引起的OutOfMemoryError java工程中concurrent的最佳实践是这样的: 1. 使用一个service component来提供thread pooling功能,所有业务逻辑中的异步任务都提交到这一个thead pool中处理。 2. 不要使用Executors提供的工厂方法创建ExecutorService。推荐使用ThreadPoolExecutor的最复杂的那个构造方法。在这里你可以指定thread pool的大小、线程回收机制、队列大小、队列满员时的处理方式 做到以上两点,才能实现对concurrent线程数目的整体把控 |
9
incompatible 2014-11-20 11:09:27 +08:00 1
@caixiexin
与数据库(以及其它外部repository)打交道的核心思想之一就是batching 能在一个请求中做完的就不要分拆成多个请求 正文这里的repo假如能提供一个getCommitsBatch(String[] sha)方法,也就没有必要动用concurrent了 |
10
RoshanWu 2014-11-20 11:12:48 +08:00
@incompatible 虽然看不太懂,但感觉很牛逼的样子,赞一个👍
|
12
caixiexin 2014-11-20 13:17:49 +08:00
@incompatible 确实。。最近工作上就有一次被这个坑了。。
|
13
humiaozuzu 2014-11-20 13:21:16 +08:00
写的很虚,有些东西不需要结合业务都可以说的很细的。
|
17
jack230230 2014-11-20 15:09:00 +08:00
@incompatible getCommit 可不是简单的像数据库查询一条记录那样,而且这个过程不想数据库查询,batch 主要是解决数据库链接开销和往返的时延,这里明显不是为了解决时延。
|
18
incompatible 2014-11-20 16:03:22 +08:00
@jack230230 对 正因为我不了解那个repo.getCommit具体是做什么用的,所以才用了“假如”的字样
|