У нас есть внутреннее хранилище данных no-sql для нашей компании.Я предоставляю хранилище Key-Value.Значение имеет формат JSON.Я буду называть его XYZ DataStore.
Постановка проблемы:
У меня есть приложение, которое порождает 10-15 потоков одновременно.Каждый поток отвечает за одновременную запись в один и тот же XYZ.Хотя записи, являющиеся PUT, различны (имеется в виду разные ключи).Созданный XYZ Rest Client одноэлементный, то есть все потоки используют один одноэлементный клиент.(Я использую Spring Bean для создания одноэлементного клиента).
Замечание: только один поток может поместить записи в XYZ.Другие потоки вообще не могут писать в sable, даже после задержки.
Как я могу обработать эту параллельную запись в XYZ?Каков предпочтительный способ?
Я могу добиться этого следующим образом:
Реализовать блокировку на PUT API на моем конце, и даже если параллельные потоки пытаются писать,с одним потоком он должен быть в состоянии ждать, пока не будет снята блокировка.
- Я не уверен, как это реализовать.Если у кого-то есть указатели, это будет здорово.
Вышеуказанные строки похожи на ветки производителя.Я могу создать одну потребительскую ветку.Поток производителя будет записывать эту запись для помещения в очередь, а поток потребителя будет читать ее одну за другой и обновлять.
- Здесь я буду использовать java.util.concorrent.BlockingQueue для чтения и записи в очереди, используемой потоками потребителя и производителя.Это правильный путь?
Может кто-нибудь подсказать мне, какой способ лучше всего сделать это?
Кстати, приложение построено на Java с использованием Spring Framework.
TIA