Anonymous
попробуй пинги проверить
.
Зайди с другой сети и просмотри
Александр
у меня главная страница открывается
Александр
сек впн попробую
.
Есть ещё и сайтик для проверки состояния сайта
Александр
через впн работает
Кириллл
https://github.com/status https://status.github.com/messages
Roman
Есть что-нибудь попроще чем RabitMQ? Нам нужна очень небольшая очередь до 500 заданий.
Constantine️
в субд своей (мускуль или посгря) заведите табличку и все
Constantine️
для 500 заданий
Constantine️
а так, да, редис
Roman
Ок, благодарю. DB там не нужна, а Redis уже есть.
Roman
всмысле нет Callback?
heavycharged
Ребятки, подскажите, есть некая структура, которая должна быть заблокирована от изменений в том месте, где она создана. Т.е., создаю структуру, блокирую её, передаю разным функциям, функции работают с ней как с иммутабельной. Вопрос такой: как это реализовать? Структуры в разных пакетах, и на месте создания я не могу получить доступ к закрытым методам.
heavycharged
Если чуть детальнее, есть репозиторий, есть коллекция. Допустим, мне нужно коллекция на чтение, но репозиторий должен как-то записать в эту коллекцию, он создает коллекцию, пишет в неё, и блочит, все последующие вызовы Push(), Pop() у коллекции возвращают ошибку, что объект иммутабельный.
heavycharged
Была идея на месте создавать ссылку на структуру, и как-то по адресу этой ссылки блокировать, т.е. есть методы Lock() и Unlock(), я передаю в Lock(locker), и затем коллекцию передаю дальше кому нужно, так как она заблокирована, и чтобы её разблочить, нужен адрес этой ссылки, но он есть только у создателя самой коллекции.
Заур
Лучше напиши небольшой пример на play.golang.org
Заур
Немного непонятно просто
🏁Александр
значение возвращаешь через функцию
heavycharged
У меня интерфейсы, не структуры, я везде возвращаю интерфейс (Repository - интерфейс, Collection - интерфейс). У интерфейсов все методы только публичные, и оба интерфейса в разных пакетах.
🏁Александр
я про свойства
Sergey
Как лучше сделать тестирование функций создающих таблицы в БД? Отдельный конфиг с данными для подключения к тестовой базе? В тестах немного опыта, интерсено мнение опытных гоферов.
heavycharged
Немного непонятно просто
пример сложно описать, там много кода на самом деле. просто представь себе три пакета: модели, коллекции, и репозиторий. модели - это структуры, коллекция - интерфейс для работы с множеством моделей, репозиторий - сохраняет/извлекает модели и создает из них множества(коллекции).
heavycharged
репозиторий (допустим метод Query который выбирает откуда-то данные) делает так: c := NewProductCollection() // например, делаю выборку из базы for rows.Next() { c.Push(model.Product) } c.Lock() // блокирую коллекцию от изменений return c // возвращаю коллекцию, и её могут только читать в другом месте c.Unlock() сделать не получится, т.к. заблокирована она была на этапе создания, тоже самое, когда мы хотим сохранить коллекцию в базу, мы допустим вычитали тело запроса из JSON, создали коллекцию и запушили туда наши модели, и сразу заблокировали, и передали это все в репозиторий, который может только прочитать из этой коллекции.
Sergey
зачем там вообще тесты?
Разве это не нужно протестить? Может SQL коряво написан или еще что?
Заур
Потом реализовать сами функции с проверкой флага и с возвращением ошибок
Заур
Моя не понимать
Заур
Моя пас
Антон
Зачем имитировать иммутабельность в языке, если можно просто взять язык, который её поддерживает с самого начала?
heavycharged
Потом реализовать сами функции с проверкой флага и с возвращением ошибок
да, это через флаг и работает, в целом. проблема в том, что если методы публичный, то Lock()/Unlock() может делать кто угодно, а не только создатель коллекции.
Илья
и тогда получится то, что вы хотите
Илья
но все это пахнет джавой и плохим дизайном, на мой вкус
Заур
Изи
heavycharged
да, действительно изи) ладно, может и без иммутабельности запилю, спасибо
Anonymous
ok ) отличный результат, очень наглядно
надо ещё алгоритмы других решетов будет потестить )
Denis
Или sync.Map
Он блокирует всю мапу? Т.е. у меня горутина пишет в одну ячейку. Мне не надо блокировать всю мапу целиком а только эту ячейку...
V
вопрос что у вас будет при изменении размера мапы с ключиком, я не готов ответить. преждевременная оптимизация - зло
L
Он блокирует всю мапу? Т.е. у меня горутина пишет в одну ячейку. Мне не надо блокировать всю мапу целиком а только эту ячейку...
сделайте шардинг мапы по ключу. вместо одной большой и толстой мапы несколько поменьше и блокируйте их
L
она умная.
не настолько умная, что бы при записи не блокировать всю мапу
Denis
сделайте шардинг мапы по ключу. вместо одной большой и толстой мапы несколько поменьше и блокируйте их
Ну у меня и так несколько поменьше. Просто они лежат в мапе общей. И время доступа к ним О(1). В чем хранить маленькие мапы если ее в другой мапе?
L
sync.Map это НЕ sync.Mutex + map.
а что? https://golang.org/src/sync/map.go
Denis
Да меня больше наверно интересует 2 вопроса: 1. Почему происходит блокировка? Ведь это тот же массив, я могу читать и писить в ячейку одним потоком без блокировки если другие пишут в другой
Denis
В другие ячейки
V
потому что во время чтения и записи возможен вызов косвенных операций, которые приводят к ошибкам при несинхронизированном вызове
Vladimir
а что? https://golang.org/src/sync/map.go
Чуток более сложная штука
Vladimir
Сам же ссылку дал
L
Чуток более сложная штука
сложнее, согласен, но просто более оптимизированная
L
для некоторых случаев
Vladimir
сложнее, согласен, но просто более оптимизированная
Ну поэтому все же оно не мапа с мьютексом, ведёт себя иначе
L
но энивей там блокируетя на запись вся мапа
Илья
Да меня больше наверно интересует 2 вопроса: 1. Почему происходит блокировка? Ведь это тот же массив, я могу читать и писить в ячейку одним потоком без блокировки если другие пишут в другой
потому, что при вставке ключа может создаваться новый бакет, и создание бакета может быть инициировано несколькими разными ключами
Anna
#работа #remote Всем привет! Ищу экспертов с большим практическим опытом в GO, готовых передавать свои знания другим! Занятость преподавателя складывается из проведения вебинаров и проверки домашних заданий студентов. И то, и другое оплачивается. Продолжительность одного курса -около 5 месяцев. Преподавать можно в любой точке мира, без отрыва от основной работы. Есть вариант записи видеокурса. От вас не требуется опыт преподавания, мы с удовольствием и бесплатно научим вас учить! С радостью отвечу на все вопросы. Лучше в личку
Alexander
Ребят, хочу написать свою небольшую KV БД, что от нее требуется 1) возможность insert/delete, update не нужен 2) очень быстрая запись 3) индекс по ключу 4) возможность "постраничной" подгрузки в память, чтобы не держать все в RAM
Alexander
существующие решения какой-то оверхед
Alexander
что можно почитать? с чего начать?
Anton
что можно почитать? с чего начать?
https://github.com/Netflix/rend реализиция протокола, метрики, общий дизайн
Kirill
ошизенный ответ %))
Kirill
на ноду сколько? лям? 10? 100? 10 тысяч? 100 тысяч?
Alexander
соре
Alexander
какой порядок количества ключей?
может быть 1млн, а может быть и все 100млн
Kirill
может быть 1млн, а может быть и все 100млн
на один сервер или на несколько?
Alexander
на ноду сколько? лям? 10? 100? 10 тысяч? 100 тысяч?
как пользователь решит, может шардить, может и не шардить, возможность шардинга и реплик я как-то упустил, тоже бы неплохо иметь