данных типа Map[K,V]
                  
                  
                  она апдейтится достаточно часто и для производительности системы в целом весьма критична - но по каждому конкретному ключу апдейтов в единицу времени скорее всего не очень много
                  
                  
                  
                  
                  
                  есть много лет назад написанный и работающий в проде вариант на акка стримах, который линеаризует апдейты по каждому ключу в отдельности и таким образом гарантирует целостность структуры
                  
                  
                  
                  
                  
                  но обычный TrieMap - без локов и должен перформить как конь
                  
                  
                  при этом для обеспечения целостности там уже есть putIfAbsent, и варианты методов replace, remove с проверкой предыдущего значения
                  
                  
                  
                  
                  
                  собственно идея, сделать поверх TrieMap 
                  
                  
                  class HandleRef(k: K) extends Ref[F, Option[V]]
                  
                  
                  это реф на ключ k в мапе
                  
                  
                  который будет реализовывать под собой оптимистичные апдейты TrieMap с проверкой предыдущего значения, и ретраить при коллизиях
                  
                  
                  
                  
                  
                  сомнение в том что если коллизий будет много, то работать будет хуже, как впрочем в любом оптимистичном локинге
                  
                  
                  если, например, там будет "горячий" ключ на который 100 тыщ в секунду апдейтов, он только и занят будет тем что ретраить
                  
                  
                  (можно на ретрай коллизий воткнуть метрику и смотреть сколько там _реально_ коллизий, то есть насколько оптимизм оправдан)
                  
                  
                  
                  
                  
                  или может для такого уже есть стандартные решения (я гуглил изо всех сил, но не нашёл)?
                  
                  
                  
                  
                  
                  спасибо за внимание!
                  
                  
                
В зиве stm что-то такое делали
TrieMap норм
Типа такого?
А чтения тоже через актор сделаны были? Если да, то TrieMap тут даст большой буст
Интересно, почему именно джавовая мапина используется, а не TrieMap
Это к автору кода
Я вот тут не понял, почему интерфейс такой странный: K => Ref[F, Option[V]] Почему не сделать K => F[Option[V]]?
чтение без апдейтов - прямо из underlying мапа
Да. Зачем Ref в результате...
Это видимо про кейс, где по каждому отдельному ключу свой реф типа
Обсуждают сегодня