Комментарии 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 своего класса
Как быстро писать в Apache Ignite