Если вы просто пишете в БД или в решение для кэширования поверх БД (например, Spring + Hibernate + EhCache и т. Д.), Вам не нужно беспокоиться о повреждении ваших таблиц и т. Д. Т.е. нет проблем параллелизма из-за низкого уровняточка зрения
Если вы хотите написать кеш самостоятельно и решить проблемы с параллелизмом самостоятельно, это потребует определенных усилий.Если вы осколите свой кеш и у вас будет «глобальная блокировка» (т.е. synchronized
на общем мьютексе) для каждого раздела, и вы получите эту блокировку для любого доступа, тогда это будет работать, хотя это не самый эффективный способ сделать это.Но создание чего-то другого, кроме глобальной блокировки, потребовало бы довольно много работы.
Хотя это тривиально, не уверен, почему вы хотите использовать хэш-карту идентификаторов ... Я не могу думать о какой-либо конкретной причине, по которой вы хотите это сделать (если вы думаете о производительности, тогдаПроизводительность обычной хеш-карты была бы последней вещью, о которой вам нужно беспокоиться в этой ситуации!).
Если ваши сущности являются статьями, то у вас, вероятно, есть другая форма параллелизма.Как тот, который решается с помощью программного обеспечения для управления версиями, такого как SVN, Mercurial и т. Д. То есть, если вы не включаете возможность слияния в свое приложение., Становится раздражающим, если кто-то редактирует чью-то статью только для того, чтобы обнаружить, что кто-то другой «совершил» другуюредактировать перед вами и т. д. Нужно ли вам добавлять такую возможность, зависит от варианта использования.
Что касается тестирования вашего приложения.для параллелизма юнит-тестирование неплохое.Путем написания параллельных юнит-тестов намного легче выявлять ошибки параллелизма.Написание параллельных тестов очень сложно, поэтому я рекомендую вам прочитать хорошие книги, такие как «Java Concurrency in Practice», прежде чем писать их.Лучше поймать свои ошибки параллелизма перед интеграционным тестированием, когда становится трудно догадаться, что, черт возьми, происходит!
ОБНОВЛЕНИЕ:
@Nupul: Это сложный вопрос.Тем не менее, если вы наберете 18 человек, моя ставка будет записывать каждый раз, когда в БД все будет в порядке.
Если вы не сохраняете какое-либо состояние в другом месте (т.е. только в БД), вам следует избавиться от любого ненужного мьютекса (и вы не должны хранить никакое состояние в другом месте, кроме БД, если у вас нет веских причинсделать это в вашей ситуации IMO).
Легко ошибиться и получить мьютекс, выполняя что-то вроде сетевой операции, и, следовательно, вызывать серьезные проблемы с юзабилити (например, приложение не отвечает в течение многих секунд и т. Д.).Кроме того, легко иметь неприятные ошибки параллелизма, такие как блокировка потоков и т. Д.
Поэтому я рекомендую сохранить ваше приложение.без состояния и просто писать в БД каждый раз.Если вы обнаружите какие-либо проблемы с производительностью из-за доступа к БД, то лучше всего обратиться к решениям для кэширования, таким как EhCache.
Если вы не хотите учиться у проекта или должны доставить приложение.из-за высоких требований к производительности, я не думаю, что написание собственного слоя кеша будет оправданным.