2

DAO を使用してデータを格納する REST Web サービス (Spring および Jersey) を使用しても問題ConcurrentHashMapありませんか?それとも、それを避けて何らかのインメモリ DB を使用する必要がありますか?

サンプルアプリなので、アプリが止まるたびにデータが消えても構わない。

4

2 に答える 2

3

ConcurrentHashMap は、エンティティの作成、読み取り、更新、および削除のみが必要な場合に適しています。私は実際に、Jetty で実行され、アプリケーションが統合するシステムをエミュレートするアプリケーションで ConcurrentHashMap を使用しています。

しかし、Soitorios Delimanolis と omicron が述べたように、複数のデータベース操作を伴うトランザクションの原子性に依存する必要がある場合、事態は複雑になります。

このような状況から身を守るために、DAO のインターフェースを定義し、ConcurrentHashMap に基づく実装を作成しました。それが十分でないときが来たら、その実装を HSQLDB または SQLite に基づく実装と交換することができます。

于 2013-09-06T14:02:33.790 に答える
1

ConcurrentHashMap を使用できますが、次の場合に問題が発生します。

  • 同じ「トランザクション」で 2 つ以上のアクションを実行しようとすると、ConcurrentHashMap は 1 つの操作でのみ正常に動作するため、そのようなアクションを他のスレッドと同期する必要があります。
  • Map キーではなく、Map.Entry.value オブジェクトの他のフィールドで検索しようとしています。

ConcurrentHashMap は他の目的のためのものです。したがって、インメモリ DB を使用することをお勧めします。

于 2013-09-06T13:53:14.597 に答える