Maxim
Но если вам не нужна отказоустойчивая конфигураци то можно и памяти)
Wingman
Maxim
Да вы извращенец))
Wingman
А в нем уже они в Памяти)
Wingman
Ну я гипотетически )
Maxim
Ну а чем тот же редис кластер не нравится?)
Maxim
Он же тоже самое делает)
Maxim
Хранит в памяти, при желании может быть и персистентным) Единственно немного времени на сериализацию будете тратить
Wingman
Когда последний раз имел дело с редисом лет 5 назад, он был дико падучим и рассыпчатым
Wingman
Хз как сейчас, но осадок остался)
Maxim
Wingman
Мб не 5, а 6..7
Wingman
Не помню уже
Maxim
Кластер вот относительно недавно у них появился был не стабилен какое-то время. Сейчас более менее. По крайней мере 6(3 master 3 slave) инстансов на одном из микросервисов уже год работают без падений)
А не кластерное решение давно вроде работает стабильно, это штука древняя как г мамонта) И нагрузки хорошие держит и масштабируется на раз два)
Заур
ребят, а как можно как-нибудь так сделать?
var params = make(map[string]interface{})
params["abc"] = struct{
a int
b int
}потом взять и сделать так
params[abs].a = 212есть, конечно, идеи сделать это всё через getParam / setParam(path ...string)
но вдруг есть что-то более правильное
Vladimir
Kirya
Alexey
Maxim
Alexey
Заур
Maxim
По крайней мере раньше так было, может с тех пор что-то изменилось в лучшую сторону)
Anonymous
Kirya
есть митапы
Anonymous
да я имею ввиду предстоящие мероприятия чтоб сходить
Kirya
https://t.me/itiviru
Kirya
вот тут что-то планируется
Anonymous
Wingman
задумался =\
Есть некие объекты и у них есть различные профили (профиль авторизации, профиль настроек, и т.д.)
Объекты хранятся в памяти.
Сначала хотел также хранить профили в памяти и к каждому объекту цеплять _указатель_ на нужные профили: таким образом при каком-либо изменении профилей объекты трогать не нужно, всё "само обновится"
А потом подумал, что программа будет постоянно и непрерывно дёргать и лочить мьютексы одних и тех же профилей (объектов очень много, с ними постоянно что-то делается, а инстансов профилей мало: при каждом действии с каждым из тысяч объектов будут по нескольку раз лочиться-анлочиться мьютексы его профилей)
что правильнее в такой ситуации делать?
Wingman
можно использовать RWMutex, тогда хотя бы постоянного рид-локов не будет, но всё равно постоянное и очень высокочастотное дёргание мьютексов одних и тех же обьектов - это нормально? :)
Мерль
Wingman
Wingman
Про это я уже выше спрашивал %)
Wingman
Мерль
Примерно тут
Имхо кэшами нужно обманываться только когда вы упретесь в производительность базы
Мерль
До этого момента это лишь добавит невероятно много геморроя
Vladimir
Мерль
Wingman
Если на каждый дергать бд без Кеша, будут тыщи qps
Alexander
Это не обязательно "убьет" БД, т.к. там тоже есть кэш запросов. Но даже если и будет проблема с бд, то по крайней мере это будет некой baseline для дальнейших улучшений
Alexander
Могу только еще раз подтвердить слова Мерль - без бенчмарков нечего оптимизировать
Wingman
А если кешировать именно запросы в какой-нибудь обертке над бд? И хранить в мапе с ключем "хеш запроса" минут по 5?
Тоже не оч вариант?
Alexander
СтОит сначала проверить, что может сделать сама бд для такого кэша. В mysql он точно есть. И проблема инвалидации там решена
Alexander
Alexander
Make it work, make it right, make it fast
Aleksandr
Да и депрекейтед с 8.0
Wingman
и вообще у меня пг %)
Wingman
на кеш бд сильно рассчитывать в любом случае не стоит
Aleksandr
Это как рассчитывать на силу трения об асфальт во время торможения, а не на тормоза
🏁Александр
я честно по описанию не совсем понял
🏁Александр
вы бы вообще прототип сделали, на тестовых сущностях
🏁Александр
бенч там к нему
🏁Александр
и пришли бы уже "вот тут у меня проблема" 🙂
Wingman
блин, я всего-то спросил "насколько плохо использовать и дёргать МНОГО мьютексов" :)
🏁Александр
мьютексы сами по себе не очень замедляют, в один поток если 🙂 там основная проблема что блокировка для паралельных
Wingman
да вот хз
(*) The problem with less very often locked mutexes is that if you have too much locking in your application, it causes to much of the inter-CPU/core traffic to flush the mutex memory from the data cache of other CPUs to guarantee the cache coherency. The cache flushes are like light-weight interrupts and handled by CPUs transparently - but they do introduce so called stalls
🏁Александр
🏁Александр
да?
Wingman
ну да
Wingman
балин, накидал и рефрешнул
🏁Александр
я конечно не большой спец по мьютексам, но с какого перепугу вложенный профиль будет вообще дергаться
Wingman
🏁Александр
а зачем вам лочить?
Wingman
дык, чтобы не читать/писать в момент изменения кем-то ещё
🏁Александр
так вы трогаете то Object, а не AuthProfile
🏁Александр
или вы хотите трогать AuthProfile?
Wingman
🏁Александр
а чорд