0

データベース: mysql -- テーブル構造は.

------------------------------------------
phone_no (This is PK)    | month   | year
------------------------------------------
varchar(15)              | INT (2) | INT(4)

これには何百万ものレコードがあり、ユーザーが月に初めてサイトにアクセスすると、DB にエントリを作成する必要があります。それ以外は何も起こりません。これはレポート目的です。私のJavaコードは次のとおりです。

The VO ---->
         public class UesrAccessInfo {
            private String phone_no;
            private int year;
            private int month;
             .. getters and setters ...
        }

テーブルにアクセスするためのJavaコードは次のとおりです。

/* 以下のメソッドは Java コードで実装され、db アクセスはありません */

String phone_no = getPhoneNumber(); 
int currentMonth = getCurMonth(); 
int currentYear = getCurYear(; 

if (phone_no == null ) {
     request.setAttribute("firstAccessInCurrentMonth", false);
} 
else{
    UesrAccessInfo oUesrAccessInfo = new UesrAccessInfo();
    oUesrAccessInfo.setPhone_no(phone_no);
    UserAcessHistoryDBUtil.getUesrAccessInfo(oUesrAccessInfo);

    //////////// Code  for getUesrAccessInfo() in UserAcessHistoryDBUtil class /////////////
      String sql = "select month , year from user_access_history where phone_no= ?";
      String[][] rs = new MyDBAccessor().getPreparedTable(sql,new String[] { oUesrAccessInfo.getMsisdn() });
      if (rs != null && rs.length > 0) {
         for (String[] item : rs) {
            oUesrAccessInfo.setMonth(Integer.parseInt(item[0]));
            oUesrAccessInfo.setMonth(Integer.parseInt(item[1]));
         }
      }else{
        oUesrAccessInfo.setMonth(0);
      }
    }
    /////////////////////////////////////////////////////////////////
    /**
     * User is already present in database
     */
    if(oUesrAccessInfo.getMonth() != 0){

        /**
         * User has already accessed the site in current month
         */
        if(oUesrAccessInfo.getYear() == currentYear && oUesrAccessInfo.getMonth() == currentMonth){
            request.setAttribute("firstAccessInCurrentMonth", false);
        }
        else{
            UserAcessHistoryDBUtil.updateUserAccessHistory(phone_no, ""+ currentMonth, "" + currentYear);
            request.setAttribute("firstAccessInCurrentMonth", true);
        }
    }
    /**
     * User is not present in database
     */
    else{
        UserAcessHistoryDBUtil.createUserAccessHistory(phone_no,""+ currentMonth, "" + currentYear);
        request.setAttribute("firstAccessInCurrentMonth", true);
    }
}

SO、ここで私はパフォーマンスの問題に直面しています。サーバーでメモリ不足エラーが発生する可能性があるため、キャッシュを使用できません。

パフォーマンスを改善するための提案は、私はmysqlの初心者です。

4

1 に答える 1