Pull to refresh

Comments 3

Пара замечаний:

При параллельном запуске нескольких putAll действительно легко получить deadlock, а в трассировке стека серверных узлов — увидеть вереницу блокировок.

В актуальных версиях Apache Ignite на atomic кэшах deadlock'а уже нет (и такого предупреждения в логе тоже), соответственно можно использовать в том числе HashMap для вставки.

В таком режиме (наличие бэкапов и включенный allowOverwrite) Data Streamer начинает работать через тот самый медленный put

У Data Streamer'а через receiver можно настроить вставку через putAll с теми же гарантиями:

streamer.receiver(DataStreamerCacheUpdaters.batched())

По скорости скорее всего будет работать также как Ваша вставка через putAll (нужно бы проверить), но распараллеливание из коробки.

Спасибо за комментарий! Всё по существу. Добавим примечания в текст.

Григорий, спасибо за статью, описанное сильно коррелирует с моим собственным опытом. В моем случае загрузка выполняется из нескольких источников, источник 1 заполняет поле 1, источник 2 заполняет поле 2 и так далее. Причем выполняется параллельно всеми серверными узлами кластера. Удалось значительно уменьшить время за счет использования BinaryObject + EntryProcessor. Поэтому плюсую все утверждения ниже

* если вы пишете данные с уникальными ключами — используйте .. всегда putAll, если не хотите заморачиваться
* вы включите SQL только в том случае, если он вам нужен
* Пишите через BinaryObject вместо POJO своего класса

Sign up to leave a comment.