2012-03-12 72 views
1

我一直在研究Play应用程序(1.2.4),它会对日志进行一些处理。这个框架并不是真正典型的东西(基本上我可能是唯一的用户),但是测试一个想法是非常快的,我决定使用它。播放框架 - 从外部数据库加载数据

我将加载存储在单独应用程序的日志(数据库)中的很多不同种类的事件和相关帐户,将它们存储在本地数据库中,然后执行事件之间的关联。到目前为止,我只是提取日志文件并将它们导入数据库,但它笨拙,缓慢,容易出错,并且在延长时间范围时文件变得非常大。

我想找出一种方法来获取对两个外部数据库的读取访问,运行查询,然后在本地数据库中创建本地存储的对象。两个外部数据库都有不同的模式,当然这两个数据库是不同的。只有在导入时才需要连接,并且由于我从中导入数据的表包含很多列,而我只需要一些列(而且服务器很远),所以我宁愿查询列需要。我很直接地在结果集中直接创建本地存储的模型,所以我甚至不需要定义基于外部数据库的模型。我可能还需要根据从数据库B获得的数据(例如,当日志行包含本地未存储的用户,在存储事件之前从其他服务器获取其数据)获取外部数据库A中的数据。只有在进口时才需要连接,理论上这是一次性事件。还有一个很大的好处是可以在不必重新启动的情况下配置数据源设置(例如,在开始导入之前将主机/端口存储在本地数据库中并读取值)。

我发现有关使用多个数据库的大多数线程似乎都与通过在多个实例上使用相同模式传播数据来减轻负载有关。我确实发现了一些有关使用不同模式分离数据库的线索,但无法弄清楚这些解决方案将如何适应我的需求。对于任何反馈,我们都表示感谢。

回答

2

您可以像使用通常的方式连接到外部数据库 - JDBC,Hibernate或其他。 Play为内部托管模型添加了一些框架魔法,但没有任何东西阻止您为n个框架添加n种不同的访问方法。您必须自己管理交易状态等,但这与平时没有什么不同。

请注意,您也可以使用Spring配置这些外部数据库。

如果这是一次性导入,您可能需要考虑编写一个迁移工具来执行此操作,并让您的主要应用程序专注于其日常工作。您可以在主应用程序和迁移应用程序之间共享数据库模型,并使用Play编写迁移应用程序。我们在之前的项目上做过这个,并且效果很好。

+0

谢谢,这似乎工作得很好。我知道一个迁移工具可以很好地工作,但我希望能够动态获取数据,所以首先获取一个月,然后像我想要的那样工作,然后再增加一些。此外,我正在考虑只在需要时才能获取一些数据。我只是设置了JDBC,这看起来很完美。 – kamina 2012-03-16 21:06:07