我一直在研究Play应用程序(1.2.4),它会对日志进行一些处理。这不是框架用于的典型事情(基本上我可能是唯一的用户),但测试一个我决定使用它的想法是如此之快。
我将加载存储在单独应用程序的日志(数据库)中的许多不同类型的事件和相关帐户,将它们存储在本地数据库中,然后在事件之间进行关联。到目前为止,我刚刚将日志提取到文件并将它们导入数据库,但它很笨拙,速度慢,容易出错,并且在时间范围扩展时文件会变得非常大。
我想找到一种方法来获取对两个外部数据库的读取权限,运行查询,然后在本地数据库中创建本地存储的对象。两个外部数据库都有不同的模式,当然本地数据库不同。只在导入过程中才需要连接,因为我导入数据的表包含很多列,其中我只需要一些(而且服务器很远)我宁愿只查询列我需要。我可以直接在结果集中直接创建本地存储的模型,因此我甚至不需要根据外部数据库定义模型。我可能还需要根据从数据库B获得的数据从外部数据库A中获取数据(例如,当日志行包含我本地未存储的用户时,在存储事件之前从其他服务器获取数据)。仅在导入期间才需要连接,理论上这是一次性事件。另外一个很大的好处是可以配置数据源设置而无需重新启动(例如将主机/端口存储在本地数据库中并在开始导入之前读取值)。
我发现使用多个DB的大多数线程似乎与通过在多个实例上使用相同模式传播数据来减少负载有关。我确实找到了一些关于使用不同模式的单独数据库的线程,但无法弄清楚解决方案能够很好地适应我的需求。任何反馈都将不胜感激。
答案 0 :(得分:2)
您可以像通常那样连接到外部数据库 - JDBC,Hibernate或其他任何东西。 Play为内部托管模型添加了一些框架魔法,但没有什么能阻止你为n个框架添加n种不同的访问方法。你必须自己管理交易状态等,但这与通常没有什么不同。
请注意,您也可以使用Spring配置这些外部数据库。
如果这是一次性导入,您可能需要考虑编写一个迁移工具来执行此操作,并让您的主应用程序专注于其日常工作。您可以在主应用程序和迁移应用程序之间共享数据库模型,因此使用Play编写迁移应用程序。我们在之前的项目中做到了这一点,而且效果非常好。