База данных: mysql - структура таблицы.реализация результата поиска кэш-памяти
------------------------------------------
phone_no (This is PK) | month | year
------------------------------------------
varchar(15) | INT (2) | INT(4)
Это Milions записей, теперь, когда доступ пользователей сайта в первый раз в месяц, то я должен сделать запись в БД, otherise ничего не произойдет, это для отчетности цели. мой Java-код:
The VO ---->
public class UesrAccessInfo {
private String phone_no;
private int year;
private int month;
.. getters and setters ...
}
Теперь код Java для доступа к таблице является:
/* Следующие методы реализованы в Java коде, нет дБ доступы не существует */
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);
}
}
Итак, здесь я столкнулся с проблемой производительности. Я не могу использовать кеширование, так как на сервере может быть ошибка памяти.
Любое предложение, чтобы улучшить производительность, я новичок в mysql.
Спасибо за ваше предложение, но в конце концов я EHCache для дела внедрения этого :) –
, но вы сказали, что вы не можете использовать кэширование .. –
Извините за что, на самом деле это время моего беспокойства кэша будет использовать Jvm память и, таким образом, может сбой, но я обнаружил, что по ehcache я также могу использовать внешнюю память. Извините за мое незнание о кешировании. Окончательная реализация будет получать, обновлять и вставлять данные в кеш, а при переходе определенного предела, backend-задание будет обновлять базу данных. :) –