当系统数据越来越庞大时,打开报表的速度会越来越慢,所以才会出现读写分离的需求,可以这样描述:正式库只做业务数据的读写,为了避免打开报表影响系统数据库性能,新建一个新的账套,每隔一段时间将正式库数据同步到报表的账套,所有报表取数都从报表账套取数。
关于数据同步,以及同步规则,由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来,可以有多个外部数据中心,看自己选择。

本文介绍了一种通过创建独立报表账套并定期同步正式库数据的方法,旨在提高报表打开速度,优化系统数据库性能。同时,展示了如何利用扩展报表的外部数据源连接功能实现读写分离,具体步骤包括新建数据库连接、修改SQL执行方式,并通过特定的代码片段实现数据同步。
8302

被折叠的 条评论
为什么被折叠?



