2013-09-06 5 views
2

Можно ли использовать веб-сервис REST (Spring и Jersey), который использует DAO с ConcurrentHashMap для хранения данных, или мне следует избегать его и использовать какую-либо БД в памяти?DAO с использованием ConcurrentHashMap

Это пример приложения, поэтому я не против потери данных каждый раз, когда приложение останавливается.

+0

Просто будьте осторожны при работе с ним. Каждая операция синхронизируется внутри. Но вам придется синхронизировать внешне, если вы хотите выполнять много операций атомарно. –

ответ

1

Вы можете использовать ConcurrentHashMap, но вы будете иметь некоторые трудности, когда:

  • пытается сделать 2 и больше действий в том же «сделке», вы должны синхронизировать такие действия с другими потоками, поскольку ConcurrentHashMap успешно работает только с одной операцией;
  • пытается найти не ключ карты, а другое поле объекта Map.Entry.value.

ConcurrentHashMap предназначен для других целей. Итак, я советую использовать любую внутреннюю память.

3

ConcurrentHashMap прекрасно, если вам просто нужно создавать, читать, обновлять и удалять объекты. Я фактически использую ConcurrentHashMap в приложении, которое работает в Jetty и эмулирует некоторую систему, которую интегрирует наше приложение.

Но, как упомянуто в Soitorios Delimanolis и omickron, все будет выглядеть волосатым, если вам нужно полагаться на атомарность транзакций, связанных с несколькими операциями с базой данных.

Чтобы защитить себя от этой ситуации, я определил интерфейсы для своих DAO и написал реализацию ConcurrentHashMap. Если придет время, когда этого будет недостаточно, я бы смог заменить эту реализацию реализацией на основе HSQLDB или SQLite.

Смежные вопросы