dropwizard 和 hibernate 中的主从关系
master-slave in dropwizard and hibernate
我有一个用 Dropwizard 编写并使用休眠连接到数据库的应用程序 (mysql)。由于发布了新功能,我期待读取 api 的高负载并考虑提供从 slave DB 的读取。我可以通过哪些不同的方式来配置主从和权衡。
如果您正在使用 @UnitOfWork Annotation ,则否,是。
不,它们不直接允许您使用只读方式与数据库通信。
是的,您可以创建两个资源,每个资源使用不同的数据库(主从)。
一种用于写入和严格读取(主)的资源,另一种用于只读(从)。
https://groups.google.com/forum/#!topic/dropwizard-user/nxURxVWDtEY
此外 link 建议 mysql 驱动程序可以自动执行此操作,但对于该会话,readOnly 应该为 true,即使您在 @UnitOfWork 中将 readOnly 设置为 true,UnitOfWorkApplicationListener 也未正确设置。
我解决的方法:
在我的案例中我有 2 个会话工厂:一个是默认的,它与 master 对话,另一个名称为 "slaveDb" ,它与 slave 数据库对话。
我为同一个实体创建了不同的 dao,一个用于从属交互,一个用于主控。在 slave dao 中,我将它与 slaveSessionFactory
绑定
现在工作单元注释有一个属性 "value" 如果您不使用它,我们在很多情况下不使用它,那么注释处理器将在默认会话之上进行对话工厂。如果您在此处定义名称,则注释处理器将使用具有该特定名称的会话工厂。
P.S。在我的例子中,我有一个 slave,因为应用程序负载不是那么高,我想要 slave 只是为了生成报告。在许多奴隶的情况下,这个解决方案不能很好地扩展。此外,由于我在 config.yaml 文件中提供了从属机器的详细信息,因此我不需要将底层连接设置为只读。
我有一个用 Dropwizard 编写并使用休眠连接到数据库的应用程序 (mysql)。由于发布了新功能,我期待读取 api 的高负载并考虑提供从 slave DB 的读取。我可以通过哪些不同的方式来配置主从和权衡。
如果您正在使用 @UnitOfWork Annotation ,则否,是。 不,它们不直接允许您使用只读方式与数据库通信。 是的,您可以创建两个资源,每个资源使用不同的数据库(主从)。 一种用于写入和严格读取(主)的资源,另一种用于只读(从)。
https://groups.google.com/forum/#!topic/dropwizard-user/nxURxVWDtEY
此外 link 建议 mysql 驱动程序可以自动执行此操作,但对于该会话,readOnly 应该为 true,即使您在 @UnitOfWork 中将 readOnly 设置为 true,UnitOfWorkApplicationListener 也未正确设置。
我解决的方法:
在我的案例中我有 2 个会话工厂:一个是默认的,它与 master 对话,另一个名称为 "slaveDb" ,它与 slave 数据库对话。
我为同一个实体创建了不同的 dao,一个用于从属交互,一个用于主控。在 slave dao 中,我将它与 slaveSessionFactory
绑定
现在工作单元注释有一个属性 "value" 如果您不使用它,我们在很多情况下不使用它,那么注释处理器将在默认会话之上进行对话工厂。如果您在此处定义名称,则注释处理器将使用具有该特定名称的会话工厂。
P.S。在我的例子中,我有一个 slave,因为应用程序负载不是那么高,我想要 slave 只是为了生成报告。在许多奴隶的情况下,这个解决方案不能很好地扩展。此外,由于我在 config.yaml 文件中提供了从属机器的详细信息,因此我不需要将底层连接设置为只读。