Playframework Play framework-从外部数据库加载数据

Playframework Play framework-从外部数据库加载数据,playframework,multiple-databases,Playframework,Multiple Databases,我一直在开发一个Play应用程序(1.2.4),它将对日志进行一些处理。这并不是该框架的典型用途(基本上我可能是唯一的用户),但测试一个想法的速度太快了,所以我决定使用它 我将加载许多不同类型的事件和存储在单独应用程序的日志(数据库)中的相关帐户,将它们存储在本地数据库中,然后在事件之间进行关联。到目前为止,我只是将日志提取到文件中并将其导入到数据库中,但这样做非常笨拙、缓慢、容易出错,而且随着时间的延长,文件会变得相当大 我想找出一种方法来获得对两个外部数据库的读取权限,运行查询,然后在本地数

我一直在开发一个Play应用程序(1.2.4),它将对日志进行一些处理。这并不是该框架的典型用途(基本上我可能是唯一的用户),但测试一个想法的速度太快了,所以我决定使用它

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

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


我发现关于使用多个DB的大多数线程似乎都与通过在多个实例上传播具有相同模式的数据来减少负载有关。我确实找到了一些关于使用不同模式的独立数据库的线索,但无法很好地理解这些解决方案如何适应我的需要。如果您有任何反馈,我们将不胜感激。

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

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


如果这是一个命中导入,您可能需要考虑编写迁移工具来实现这一点,并使您的主要应用程序专注于它的日常工作。您可以在主应用程序和迁移应用程序之间共享DB模型,从而使用Play编写迁移应用程序。我们在以前的一个项目中这样做了,效果非常好。

谢谢,这似乎效果不错。我知道迁移工具可以很好地工作,但我希望能够非常动态地获取数据,因此,请先获取一个月的数据,当一切正常时,再以增量方式获取更多数据。我也在考虑只有在我需要的时候才能在飞行中获取一些数据。我刚刚设置了JDBC,它似乎工作得很好。