首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mondrian OLAP连接管理

Mondrian OLAP连接管理
EN

Stack Overflow用户
提问于 2013-05-24 20:29:46
回答 1查看 967关注 0票数 1

管理Mondrian数据库连接的推荐模式是什么?

我正在使用Mondrian作为Scala/Play Framework web应用程序中的库。例如:

代码语言:javascript
复制
var connection
try {
  connection = DriverManager.getConnection(connection_string).unwrap(classOf[OlapConnection])
  val result = connection.createStatement.executeOlapQuery(mdx)
  // ... use the result ...
} finally {
  if (connection) connection.close
}

在最后阻塞中调用close是否是正确的方法?

如何配置连接池?

终止长期运行的查询的推荐方法是什么?是否可以监视查询的进度?

EN

回答 1

Stack Overflow用户

发布于 2013-05-24 22:53:29

在finally块中调用close()可以确保连接真的关闭,所以对任何资源都是正确的。

我会把它写成

代码语言:javascript
复制
val connection = DriverManager.getConnection(connection_string).unwrap(classOf[OlapConnection])
try {
    [...]
} finally {
    connection.close
}

为了摆脱苦力。但这仍然是“祈使式”,所以我会用

代码语言:javascript
复制
def withResource[T <: { def close() }, R](resource: T)(code: (T) => R): R = {
  try {
    code(resource)
  } finally {
    import scala.language.reflectiveCalls
    resource.close()
  }
}

代码语言:javascript
复制
withResource(DriverManager.getConnection(...)) {
  conn =>
    [...]
}

为了摆脱试图/捕获,这会使您的代码混乱。更重要的是,你不能忘记关闭。这适用于提供close()方法的任何类。如果将withResource()方法放在一个特性中,则可以将其混合到类中。

至于连接池,则是is another thread here

至于长期运行的OLAP查询..。他们应该不会跑很长时间。使用Essbase或Palo的经验表明,这些查询接近“实时”。如果您深入研究,唯一的问题可能是要传输到客户端的大量数据。在读取结果时,可以使用传入的数据作为实现进度显示的手段。OLAP数据库非常快。无论如何,您可以将查询放在后台线程中,这样代码是非阻塞的,但是不需要使用OLAP来执行。只要尽可能快地将数据导入前端,这就是客户端(Excel插件)的工作方式。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16743156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档