[英]How to efficiently store temporary userdata
我是Java的新手,我需要一些幫助。 是否有(有效)解決以下問題的方法:
我有一個機器人,玩家可以在其中“滾動”獲得金幣。 現在,每滾動一遍,數據庫就會使用用戶擁有的更新硬幣數量進行編輯...但這會給性能造成巨大損失。
我需要的:
User A rolls and wins 10 coins
User B rolls and wins 20 coins
User A rolls and loses 20 coins
User C rolls and wins 30 coins
User A rolls and wins 10 coins
--1 minute has ended--
--update database--
我現在所擁有的:
User A rolls and wins 10 coins
--update database--
User B rolls and wins 20 coins
--update database--
User A rolls and loses 20 coins
--update database--
User C rolls and wins 30 coins
--update database--
User A rolls and wins 10 coins
--update database--
是否有存儲臨時用戶數據的好方法? 我正在考慮每次新用戶滾動時都使用用戶名創建一個新的String,並使用更新后的值將int鏈接到它,並每分鍾將它們傳遞到數據庫中。
但是我覺得必須有很多更好的解決方案,我什么都沒想到。
如果有人可以指導我采取一個好的方法或舉一個例子? 將不勝感激! 提前致謝!
我希望我的問題不會太笨拙。
創建一個列表,您可以在其中臨時存儲數據,並且當列表的大小超過特定閾值時,然后更新數據庫。
考慮將字符串發送給函數
List<String> userEvents = new ArrayList<String>();
private final int THRESHOLD = 10;
public void saveDataToDB(String event) {
userEvents.add(event);
if( userEvents.size() > THRESHOLD ) {
boolean status DBSaver.save(userEvents);
if( status ) {
userEvents.clear();
} else {
//error condition... Handle it
}
}
}
現在,DBSaver將是具有靜態連接對象的單例類,該類將被重用。
您可以創建一個本地緩存,其中包含每個用戶會話的數據。 在會話結束時,更新數據庫中的用戶數據。 為了實現緩存,您可以使用HashMap 。 密鑰將是您的用戶,值將是用戶的對象或硬幣數量。 這是您得到的:
User A rolls and wins 10 coins
User B rolls and wins 20 coins
User A rolls and loses 20 coins
User C rolls and wins 30 coins
User A rolls and wins 10 coins
--User A stops playing--
--update database for user A--
User C rolls and wins 30 coins
User B rolls and wins 20 coins
User C rolls and wins 10 coins
User B rolls and wins 10 coins
--User B stops playing--
--update database for user B--
這是一個簡短的實現:
public class Game
{
private static Map<String, int> users = new ConcurrentHashMap<String, int>();
public void endGame(Sring user) {
//do something for user
updateDatabase(user, users.get(user));
}
public void roll(String user) {
//roll implementation
}
private void updateDatabase(String user, int numberOfCoins) {
//update database for user here.
}
}
只要確保您的連接僅建立一次即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.