2

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

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

4

2 回答 2

3

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

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

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

于 2013-09-06T14:02:33.790 回答
1

您可以使用 ConcurrentHashMap,但在以下情况下会遇到一些困难:

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

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

于 2013-09-06T13:53:14.597 回答