数据库中数据量很大, 但又不可以删除时同时又要优化程序检索数据时间。
答:方式有很多比如 创建数据库表分区,创建索引, 存储过程等; 我这里采用动态创建数据库表的方式。
完全可以在不创建表分区情况下实行分表管理 例如 日志记录表 将日期(yyyy-MM)作为默认表后缀动态追加, 例如 文章发布表 将用户名作为后缀名进行动态追加 ;
动态创建数据库表的方式要具体问题具体分析, 比如JDBC中直接使用create table 表名_dynamicStr(...);
文章发布系统 dynamicStr 可以用已注册登陆的用户名, 日志记录表 dynamicStr 可以采用 ‘log_‘+new SimpleDateFormat("yyyyMM").format(new Date());
下面例子是使用hibernate动态创建数据库表的例子, 如果有兴趣可以将下面的代码抽取成动态创建表的Utils.
public class ReportDBApi {
private SessionFactory sessionFactory = null;
public ReportDBApi(){
createSession();
}
public void createSession(){
Date date = new Date();
SimpleDateFormat simpledateformat = new SimpleDateFormat("yyyyMMdd");
String now_time = simpledateformat.format(date);
String tablename = "TBL_REPORT_STATUS_20050707";
tablename = "TBL_REPORT_STATUS_" + now_time;
try {
Configuration cfg = new Configuration().addClass(cn.sports.vas.sms.unicom.TblReportStatus.class).configure();
Table table = cfg.getClassMapping(TblReportStatus.class).getTable();
table.setName(tablename);
cfg.getClassMapping(TblReportStatus.class).setTable(table);
sessionFactory = cfg.buildSessionFactory();
}
catch (MappingException ex) {
ex.printStackTrace();
}catch (HibernateException ex) {
ex.printStackTrace();
}
}
public void insertPO(TblReportStatus po) throws HibernateException {
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
session.save(po);
tx.commit();
session.close();
}
public void closeSession() throws HibernateException {
sessionFactory.close();
}
}