当系统数据越来越庞大时,打开报表的速度会越来越慢,所以才会出现读写分离的需求,可以这样描述:正式库只做业务数据的读写,为了避免打开报表影响系统数据库性能,新建一个新的账套,每隔一段时间将正式库数据同步到报表的账套,所有报表取数都从报表账套取数。
关于数据同步,以及同步规则,由DBA去做,我们主要关注程序实现。
程序方面,主要是EAS执行的sql都是当前数据中心的,无法读取别的datacenter。
无意中看到扩展报表也有报表的读写分离功能,思路是只要能调出扩展报表的外部数据源连接,就能实现bos报表的读写分离。
1、进入扩展报表的开发界面,点击 文件-外部数据中心管理
2、新建数据库连接,填入IP、端口、用户、密码等参数
3、报表里面的sql执行连接不使用传统的DbUtil来执行,使用如下代码
Connection conn = null; Statement stmt = null; ResultSet rs = null; try { List list = DataCenterConnUtil.getDataCenterList(ctx); String sql = "select * from ds_test"; conn = DataCenterConnUtil.openConnection((DataCenterInfo) list.get(0)); stmt = conn.createStatement(); rs = stmt.executeQuery(sql); while (rs.next()) { String s = rs.getString(1); System.out.println(s); } } catch (Exception e) { e.printStackTrace(); } finally { SQLUtils.cleanup(rs, stmt, conn); }
其中 DataCenterConnUtil.getDataCenterList(ctx)是从扩展报表的外部数据中心中转化出一个DataCenter来,可以有多个外部数据中心,看自己选择。