最近我公司的数据流量过大,导致数据库爆掉!
所以,数据库压力增大!
一般来说!
数据库压力增大,可以通过建立中间表,或者log表,通过一个job执行!一步步查!
又或者分离表,见一个很大的表分成很多小表!查询的时候,要更加明确!也可以通过多表查询得到结果!
还有一种就是直接得到日志!
我用的是直接用tomcat创建一个Log日志文件!
首先在config.properties中配置下
加
epg.video.logfile.dir =E:/job/log
然后在spring配置中配置下!也就是启动和退出的时候才启动日志!
<bean id="runtimeService" class="com.viewtoo.epg.service.RuntimeService" init-method="init" destroy-method="destroy"> <property name="manager"> <ref local="manager"/> </property> <property name="epgVideoDrLogFileDir" value="${epg.video.logfile.dir}"/> </bean>
然后在com.viewtoo.epg.service.RuntimeService类里面配置一个set方法!这个我就不贴代码了!
下面是我的java代码
/**
* 定义log的输出格式,已经存储区域的命名
* @param pathName
* @return Log
*/
private Logger _getLogger(String pathName) {
Logger logs = (Logger)logHandlerMap.get(pathName);
try {
if (logs == null) {
logs = Logger.getLogger("com.viewtoo.epg.logservice." + pathName);
Layout layout = new PatternLayout("%d{yyyy-MM-dd HH:mm:ss}%m%n"); //输出格式
String filePath = this.epgVideoDrLogFileDir + pathName + "_" + DateUtils.formatDate(new Date(), "yyyy-MM-dd") + ".log";
String datePattern = ".yyyy-MM-dd"; //每天
DailyRollingFileAppender appender = new DailyRollingFileAppender(layout, filePath, datePattern);
logs.setLevel(Level.INFO);
logs.addAppender(appender);
logHandlerMap.put(pathName,logs);
}
return logs;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
logHandlerMap 这个我定义的是全局!因为如果不这么定义,会导致log重复输出!
所以!
这么定义方便事例和查找!我debug了也找不到问题!网上找了很多资料!但是,大多数,都无法与我想的逻辑匹配!
所以!这么定义方便!
/**
*
* @param obj
* @param pathName
*/
private void _log2File(Object obj, String pathName) {
Logger logs = this._getLogger(pathName.trim());
if("EpDr".equals(pathName.trim())){
EpDr epDr = (EpDr)obj;
logs.info(epDr.toString());
}
}
上面这么写!是为了方便以后拓展!还有就是!我在EpDr 这个entity中自定义了一个toString方法!
还有,就是该,在创建日志文件的时候,要记得!输出的顺序,要跟数据库的一样!
因为,这样方便查询!而且,也方便以后再DB端操作!