作者embman (无尾熊)
看板java
标题[问题] 一个後端的设计问题?
时间Fri Mar 11 12:20:11 2016
请问一下:
我在server写一个List,供应很多前端app client取资料,然後我固定半小时才去
资料库更新一次这个List。这是个Restful API。
我会这样做的原因是手机app client端有上万个用户,我不想每次拿资料都要进出
一趟资料库,所以才想弄一个List在server本地端,每半小时再去资料库更新一次
资料。
但我一直有一个疑问,当我去资料库更新的时候,如果那一刻(秒),刚好有前端
Client来取资料,请问这时这个app会:
1.取到旧的资料
2.出错,exception ?
EX:
in some class:
localList = getUpdatedDataFromDatabase();
刚好在做这个动作时,有client要拿资料,此时会怎麽样?
要做什麽措施避免混乱?还是这个方法根本不好?
感谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 68.5.180.240
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1457670014.A.559.html
1F:推 haha02: 新的list用另外建的然後整个换成新的instace就好 不要去修 03/11 13:05
2F:→ haha02: 改旧的List的内容 这样client顶多拿到旧的 03/11 13:06
3F:→ embman: 感谢楼上大大的回覆! 03/11 13:12
4F:推 LaPass: 关键字「执行绪安全」 03/11 14:37
5F:→ LaPass: 主要还是要看你的程式码怎麽写 03/11 14:38
6F:→ LaPass: 这是一个超大的问题 03/11 14:39
7F:→ LaPass: 课题 03/11 14:39
8F:→ LaPass: 绝大多数是加个 synchronized 就可以解决掉的状况 03/11 14:40
9F:推 gmoz: CopyOnWriteArrayList 03/11 17:36
10F:→ gmoz: 如果是用修改的话 03/11 17:37
11F:推 dream1124: 我想你要做的是 in memory cache 吧?你要自己来吗? 03/11 22:53
12F:→ dream1124: 还是透过第三方 java 函式库? 03/11 22:53
13F:推 yyc1217: 可以用 Collections.synchronizedList 03/12 17:42
14F:→ yyc1217: 不过直接替换掉比较好就是了 03/12 17:42
15F:→ cha122977: CopyOnWrite +1 03/12 21:31
16F:→ dou0228: 自己用 List 不一定比较高效率喔... 03/13 22:02