【发布时间】:2016-11-03 14:33:20
【问题描述】:
我有一个用 Dropwizard 编写的应用程序,并使用 hibernate 连接到 DB(mysql)。由于发布了新功能,我预计读取 api 的负载会很高,并考虑提供从从数据库的读取。我可以通过哪些不同的方式来配置主从和权衡。
【问题讨论】:
标签: mysql hibernate dropwizard master-slave
我有一个用 Dropwizard 编写的应用程序,并使用 hibernate 连接到 DB(mysql)。由于发布了新功能,我预计读取 api 的负载会很高,并考虑提供从从数据库的读取。我可以通过哪些不同的方式来配置主从和权衡。
【问题讨论】:
标签: mysql hibernate dropwizard master-slave
我解决的方法:
在我的情况下,我有 2 个会话工厂:一个是默认的,它与主数据库通信,另一个名称为“slaveDb”,它与从数据库通信。
我为同一个实体创建了不同的 dao,一个用于 slave 交互,一个用于 master。在 slave dao 中,我将它与 slaveSessionFactory 绑定
现在工作单元注释有一个属性“值”,如果你不使用它,我们在很多情况下不使用它,那么注释处理器将在默认会话工厂之上进行对话。如果您在此处定义名称,则注释处理器将使用具有该特定名称的会话工厂。
附:在我的情况下,我有一个从属,因为应用程序不是那么高负载,我想要从属只是为了生成报告。如果有很多从站,这个解决方案不能很好地扩展。此外,当我在 config.yaml 文件中提供从机详细信息时,我无需将底层连接设置为只读。
【讨论】:
Now unit of work annotation has one attribute "value" - 这非常有用
如果您使用的是 @UnitOfWork Annotation ,则否,是。 不,它们不允许您直接使用只读方式与数据库通信。 是的,您可以使用不同的数据库(主从)创建两个资源。 一种用于写入和批判性读取(主)的资源,另一种用于只读(从)。
https://groups.google.com/forum/#!topic/dropwizard-user/nxURxVWDtEY
同样链接建议 mysql 驱动程序可以自动执行此操作,但对于该会话 readOnly 应该为 true,即使您在 @UnitOfWork 中设置 readOnly true,UnitOfWorkApplicationListener 也没有正确设置。
【讨论】: