【问题标题】:master-slave in dropwizard and hibernatedropwizard和hibernate中的主从
【发布时间】:2016-11-03 14:33:20
【问题描述】:

我有一个用 Dropwizard 编写的应用程序,并使用 hibernate 连接到 DB(mysql)。由于发布了新功能,我预计读取 api 的负载会很高,并考虑提供从从数据库的读取。我可以通过哪些不同的方式来配置主从和权衡。

【问题讨论】:

    标签: mysql hibernate dropwizard master-slave


    【解决方案1】:

    我解决的方法:

    1. 在我的情况下,我有 2 个会话工厂:一个是默认的,它与主数据库通信,另一个名称为“slaveDb”,它与从数据库通信。

    2. 我为同一个实体创建了不同的 dao,一个用于 slave 交互,一个用于 master。在 slave dao 中,我将它与 slaveSessionFactory 绑定

    3. 现在工作单元注释有一个属性“值”,如果你不使用它,我们在很多情况下不使用它,那么注释处理器将在默认会话工厂之上进行对话。如果您在此处定义名称,则注释处理器将使用具有该特定名称的会话工厂。

    附:在我的情况下,我有一个从属,因为应用程序不是那么高负载,我想要从属只是为了生成报告。如果有很多从站,这个解决方案不能很好地扩展。此外,当我在 config.yaml 文件中提供从机详细信息时,我无需将底层连接设置为只读。

    【讨论】:

    • Now unit of work annotation has one attribute "value" - 这非常有用
    • 那么,我看需要为SlaveSessionFactory和MasterSessionFActory的映射设置work注解的value属性对吧?是否有任何其他全局方式可以为整个应用程序执行此操作。我的问题是,我有一个使用多年的生产应用程序,并且最初没有设置复制数据库,我们现在正在尝试实现它。因此,我们正在寻找一种代码更改最少的更好的解决方案。我希望你能提供你的意见。
    • cc ^^ @MartinKonecny
    • 我不相信有全局方式
    • 我又做了一些搜索,但担心它仍然不可用。让我知道你是如何解决的。
    【解决方案2】:

    如果您使用的是 @UnitOfWork Annotation ,则否,是。 不,它们不允许您直接使用只读方式与数据库通信。 是的,您可以使用不同的数据库(主从)创建两个资源。 一种用于写入和批判性读取(主)的资源,另一种用于只读(从)。

    https://groups.google.com/forum/#!topic/dropwizard-user/nxURxVWDtEY

    同样链接建议 mysql 驱动程序可以自动执行此操作,但对于该会话 readOnly 应该为 true,即使您在 @UnitOfWork 中设置 readOnly true,UnitOfWorkApplicationListener 也没有正确设置。

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 2013-06-05
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多