[問題] 一個後端的設計問題?

作者: embman (無尾熊)   2016-03-11 12:20:11
請問一下:
我在server寫一個List,供應很多前端app client取資料,然後我固定半小時才去
資料庫更新一次這個List。這是個Restful API。
我會這樣做的原因是手機app client端有上萬個用戶,我不想每次拿資料都要進出
一趟資料庫,所以才想弄一個List在server本地端,每半小時再去資料庫更新一次
資料。
但我一直有一個疑問,當我去資料庫更新的時候,如果那一刻(秒),剛好有前端
Client來取資料,請問這時這個app會:
1.取到舊的資料
2.出錯,exception ?
EX:
in some class:
localList = getUpdatedDataFromDatabase();
剛好在做這個動作時,有client要拿資料,此時會怎麼樣?
要做什麼措施避免混亂?還是這個方法根本不好?
感謝!
作者: haha02 (來人!上夾棍!)   2016-03-11 13:05:00
新的list用另外建的然後整個換成新的instace就好 不要去修改舊的List的內容 這樣client頂多拿到舊的
作者: embman (無尾熊)   2016-03-11 13:12:00
感謝樓上大大的回覆!
作者: LaPass (LaPass)   2016-03-11 14:37:00
關鍵字「執行緒安全」主要還是要看你的程式碼怎麼寫這是一個超大的問題課題絕大多數是加個 synchronized 就可以解決掉的狀況
作者: gmoz ( This can't do that. )   2016-03-11 17:36:00
CopyOnWriteArrayList如果是用修改的話
作者: dream1124 (全新開始)   2016-03-11 22:53:00
我想你要做的是 in memory cache 吧?你要自己來嗎?還是透過第三方 java 函式庫?
作者: yyc1217 (somo)   2016-03-12 17:42:00
可以用 Collections.synchronizedList不過直接替換掉比較好就是了
作者: cha122977 (CHA)   2016-03-12 21:31:00
CopyOnWrite +1
作者: dou0228 (7777)   2016-03-13 22:02:00
自己用 List 不一定比較高效率喔...

Links booklink

Contact Us: admin [ a t ] ucptt.com