【问题标题】:One DAO per thread or threadsafe DAO?每个线程一个 DAO 还是线程安全 DAO?
【发布时间】:2011-01-01 08:18:00
【问题描述】:

我想知道在多线程应用程序中是否存在经过批准的做法。我应该每个线程有一个 DAO 还是简单地将一个 DAO 设为线程安全的单例。

【问题讨论】:

    标签: dao


    【解决方案1】:

    这在很大程度上取决于您用于数据访问的机制。如果您有一个非常可扩展的数据访问,并且有很多线程,那么使用某种形式的线程静态数据访问可能是有利的。

    如果您没有可扩展的数据访问,您的提供程序不支持每个进程的多个线程,或者您此时不需要可扩展性,则使用具有适当同步的单例更简单且更易于实现。

    对于大多数业务风格的应用程序,我个人认为单例方法更容易维护,而且可能更好——如果没有其他原因的话,它更容易有效地测试。可能不需要多个线程进行数据访问,因为数据访问可能不会成为影响可用性的瓶颈(如果您设计正确,并且适​​当地批量请求)。

    【讨论】:

    • 我的 DAO 实际上连接到两个源:SimpleDB 和通过 RPC 的 PHP API。我的猜测是我可能应该在每个线程中使用大约 100 个线程的 DAO,以避免出现瓶颈问题。在这种情况下,您有什么明显的理由不这样做吗?
    • 让 DAO 成为单例可能更好,并且在内部,只是异步工作。然后它可以根据需要使用 ThreadPool 进行扩展...这对于 PHP API 尤其如此,因为 Web 请求可以很好地异步工作,并且大多数 Web 框架对此都有很好的支持...
    【解决方案2】:

    使用最适合您的应用程序架构的方法,除非:

    1) 创建数据访问对象的成本很高,在这种情况下,您应该倾向于线程安全的单例。

    2) 您的对象保持可变状态,如Active Record pattern。 (不可变的 DAO 配置状态,如超时阈值,不算在内。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-26
      • 2021-08-18
      • 2014-09-02
      • 2010-11-18
      • 1970-01-01
      • 2013-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多