.
а зачем её держать, она поднимается во время тестов
Смотрел твои выступления про Go, забавно было слушать 😂
Slava
почему забавно? =)
.
Ну, весело объясняешь
Nik
Мне кажется, если все делается одинаково, то разницы быть не должно, где поднимать
Мок по времён дольше чем поднимать базу в контейнере и заливать в неё тестовые данные? Серьезно?
.
И вполне интересно
Slava
спасибо =)
Nik
а зачем её держать, она поднимается во время тестов
Если это sql - то ещё куда ни шло. А если couchbase например?
Slava
к сожалению не знаю, что с каучбейз =)
Nik
Если мускул пустой более менее норм, то что посерьёзнее уже тяжело поднимать на рабочей тачке
Nik
Потому в CI и на серверах тестить
Nik
И тесты на чистых инстансах
Nik
А пока ты кодишь, играясь с базой, и на ней же тестишь - это уже не совсем чистый тест
Sebor▂▅▇█▓▒░
можно держать 2 инстанса - дев и тест
Nik
Если это два тонких sql то да. Если базы тяжеловаты, или само хранилище более требовательно - то уже нет
Sebor▂▅▇█▓▒░
ну как то же тестят терабайтные базы 🙂
Slava
наверное не тестят =)
Nik
ну как то же тестят терабайтные базы 🙂
Не на локальных дев машинах наверно
Slava
ну или тестят только производительность/верность данных
Slava
у нас девелоперское окружение работает в амазоне
Slava
на 16гб инстансах
Slava
на локальной машине всю память голанд съедает на пару с хромом )
Nik
на локальной машине всю память голанд съедает на пару с хромом )
Люблю джетбреин за работу с гитом. В остальном - жручий ад
Nik
на 16гб инстансах
У меня 128гб физики)
Slava
в тестах не обязательно все данные тащить ведь
Slava
ну и другой момент, не обязательно все тесты запускать при разработке. а в CI они могут и час отрабатывать
Nik
ну и другой момент, не обязательно все тесты запускать при разработке. а в CI они могут и час отрабатывать
Предлагаю разойтись на мнении, что есть горячие тесты, и все остальные.
Nik
И все объём надо крутить на ci перед деплоем на чистом окружении
Nik
И разойтись спать🙂
Slava
не понял последнего аргумента =) но не важно
Nik
))
heavycharged
подскажите, как правильней всего организовать мапу с TTL? мне нужно, чтобы каждое значение мапы жило допустим около 60 секунд, а потом удалялось. как это делается? создается горутина, которая делает слип и потом удаляет элемент мапы?
heavycharged
Мне пока нужно для понимания работы, есть где применить в принципе, но пока обходился без этого.
Nikita
к счастью исходники go пакетов читабельны
heavycharged
я просто вижу пару решений: 1) на каждый элемент мапы - спящая горутина, которая по таймауту удалит по ключу значение из мапы. мне кажется, самое плохое решение. 2) при добавлении элемента, пишем в какую-то другую мапу значение когда нужно удалить элемент, а по ней итерируемся и лочим через мьютексы её, если нужно удалить, при этом можно иногда ложить в сон эту горутину, до близжайшего элемента который нужно удалить. 3) нагромоздить что-то вроде очереди, в которой первый элемент это всегда самый ближний на удаление, а при добавлении собственно добавляем в то место, где элемент -1 удалится раньше, а элемент +1 удалится позже. и это только то, что удалось придумать мне. какая из этих реализаций лучше, черт его знает.
heavycharged
у меня иногда проблемы с чтением чужих сурцов
heavycharged
Хорошо когда есть комменты, а то вот допустим: type Cache struct { *cache // If this is confusing, see the comment at the bottom of New() }
🏁Александр
https://golang.org/pkg/time/#After
heavycharged
да, но это ж на каждый элемент горутину нужно
heavycharged
или как по другому?
heavycharged
там же вроде 8к горутин накидал и все)
Slava
Можно без таймеров
🏁Александр
можно 1 гоурутиной 🙂
Slava
Хранишь дату обновления
Slava
При доступе - проверяешь не протухло ли
Slava
Можно самому иногда делать резет протухших значений, если очень нужно
Slava
Дату обновления хранишь для каждого значения и вместе с ним
🏁Александр
погодите! щаз я сделаю реализацию
heavycharged
да, подчищать точно надо, вот собственно и вопрос, как это делать, лочить мапу и проитерироваться по ней, так как других способов ходить по мапе пока в неё пишут я не знаю. я поэтому и думаю, что лучше сделать отдельный (буферизированный) канал, куда сливать даты очисток и клюки для удаления, там уже горутина примет и когда нужно удалить - отправит сигнал об удалении туда, где собственно и работают с основной мапой. но честно говоря хз, я вообще с этим параллельным кодом не давно работаю, поэтому не представляю себе как это на практике организовать лучше.
Slava
Зачем канал то?
heavycharged
А полезный навык же
навык то точно полезный, но что поделать) когда начинаются поинтеры и unsafe я подвисаю иногда
Slava
Делай свой тип
Slava
И лоч доступы
Vladimir
Глобальный лок, удаление при доступе если протухло
Vladimir
И если очень нужно есть горутина одна которая подчищает протухлость
🏁Александр
екарный плейграуд
🏁Александр
шо он творит 🙁
heavycharged
Ну у нас есть map[string]Entry, type Enrty struct {Value: interface{}, LastAccess: int64} Подчищалка же полюбому залочит эту мапу?
heavycharged
по другому же никак?
Slava
Или ринг с мапами ;)
heavycharged
или я чего-то не понимаю?
Slava
Удалять протухшие мапы из ринга автоматом
heavycharged
что за ринг?
Slava
Забудь про ринг
Slava
Это на следующий уровень оставим
heavycharged
heavycharged
ты изверг
Slava
Владимир дело говорит ;)
Slava
Почитай готовую имплементацию
heavycharged
ладно, но про ринг то скажи, это паттерн или что, как гуглить