【问题标题】:DAO using a ConcurrentHashMap使用 ConcurrentHashMap 的 DAO
【发布时间】:2013-09-06 13:31:49
【问题描述】:

是否可以拥有一个使用带有ConcurrentHashMap 的 DAO 的 REST Web 服务(Spring 和 Jersey)来存储数据,或者我应该避免它并使用某种内存数据库?

这是一个示例应用程序,所以我不介意每次应用程序停止时都会丢失数据。

【问题讨论】:

  • 操作时要小心。每个操作在内部同步。但是,如果您想以原子方式执行许多操作,则必须在外部进行同步。

标签: java spring rest dao concurrenthashmap


【解决方案1】:

如果您几乎只需要创建、读取、更新和删除实体,ConcurrentHashMap 就很好。我实际上是在一个在 Jetty 中运行并模拟我们的应用程序集成的某些系统的应用程序中使用 ConcurrentHashMap。

但是,正如 Soitorios Delimanolis 和 omickron 所提到的,如果您需要依赖涉及多个数据库操作的事务的原子性,事情就会变得棘手。

为了保护自己免受这种情况的影响,我为我的 DAO 定义了接口并编写了由 ConcurrentHashMap 支持的实现。如果到时候这还不够,我可以用基于 HSQLDB 或 SQLite 的实现替换该实现。

【讨论】:

    【解决方案2】:

    你可以使用ConcurrentHashMap,但是你会遇到一些困难:

    • 尝试在同一个“事务”中执行 2 个或更多操作,您应该将这些操作与其他线程同步,因为 ConcurrentHashMap 仅通过一个操作成功运行;
    • 尝试不按 Map 键,而是按 Map.Entry.value 对象的其他字段进行搜索。

    ConcurrentHashMap 用于其他目的。 所以,我建议使用任何内存数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多