Aleksandr
Anonymous
Васильев Виктор
🤔
Просто большинство наследует базовый интерфейс ридера а он подразумевает потоковое чтение :)
Pawel
Pawel
Wingman
Wingman
решение в лоб-то есть, но только на pcre
Pawel
универсальное решение - https://github.com/prataprc/goparsec
Wingman
м
Wingman
Wingman
спасибо, погляжу
Pawel
это лучшее что я вынес из хаскеля, простите мой французсский
Aleksandr
А что в го является аналогом decimal для работы с деньгами?
Aleksandr
Писать свою структуру? Или какой популярный проект?
Pawel
big.Rat
Aleksandr
Спс посмотрю
Wingman
Народ, а посоветуйте плз - может, есть готовое решение для хранения переменных/объектов/структур в памяти, типа мап, но при этом с возможностью индексирования и поиска не только по основному ключу, но и, например, по значениям переменных в хранимых структурах? Ну или там, с ручным заданием нескольких ключей для индексирования и поиска
Для чего нужно: есть большушая куча объектов в бд, сложных, со связями между собой, с которыми постоянно необходимо что-то делать (через опр.промежутки времени)
Постоянно терзать бд для их выбора - неоптимально, можно ведь держать все в памяти и дергать базу только ддя обновлений и, например, периодических синхронтзаций
Но хочется делать это удобно :)
.
Кто нибудь может обьяснить, почему UPDATE SQL-запросы такие медленные? Даже самые простые.
Daniel
при чем тут go?
.
Не при чем
.
просто вопрос
Wingman
Wingman
Особенно заметно, если данных много
Wingman
+ лок/анлок
Slava
Кто нибудь может обьяснить, почему UPDATE SQL-запросы такие медленные? Даже самые простые.
не все медленные, всё зависит от 1) как вы настроили и какие индексы используете 2) настроек самой субд, включен ли там лог и как часто он синхронизруется, 3) от настроек репликации, нужен ли кворум или всё асинхронное. 4) от нагрузки бд, возможно данные очень часто обновляются и у вас лок контеншен высокий 5) возможно у вас проблемы с железом/настройками ос итд
Slava
вообщем много всего
.
Pawel
Народ, а посоветуйте плз - может, есть готовое решение для хранения переменных/объектов/структур в памяти, типа мап, но при этом с возможностью индексирования и поиска не только по основному ключу, но и, например, по значениям переменных в хранимых структурах? Ну или там, с ручным заданием нескольких ключей для индексирования и поиска
Для чего нужно: есть большушая куча объектов в бд, сложных, со связями между собой, с которыми постоянно необходимо что-то делать (через опр.промежутки времени)
Постоянно терзать бд для их выбора - неоптимально, можно ведь держать все в памяти и дергать базу только ддя обновлений и, например, периодических синхронтзаций
Но хочется делать это удобно :)
здесь нечего особо советовать, кроме как держать в одном объекте несколько мапов с разными ключами и указателями на одни и те же сущности.
Pawel
другой вариант, более разумный в 99% описанных случаев, - не извращаться с мапами, держать всё в одном массиве, и выполнять по нему линейный поиск
Wingman
Wingman
Придется делать
Мерль
Народ, а посоветуйте плз - может, есть готовое решение для хранения переменных/объектов/структур в памяти, типа мап, но при этом с возможностью индексирования и поиска не только по основному ключу, но и, например, по значениям переменных в хранимых структурах? Ну или там, с ручным заданием нескольких ключей для индексирования и поиска
Для чего нужно: есть большушая куча объектов в бд, сложных, со связями между собой, с которыми постоянно необходимо что-то делать (через опр.промежутки времени)
Постоянно терзать бд для их выбора - неоптимально, можно ведь держать все в памяти и дергать базу только ддя обновлений и, например, периодических синхронтзаций
Но хочется делать это удобно :)
Погугли в сторону golang embedded in memory dB
Есть несколько штук
Wingman
Wingman
но таки большинство инмемори - это key-value, а мне хочется мультикей
Slava
Мультикей это как?
Wingman
да это я из головы слово взял
Slava
А как оно в голове работает?
Wingman
в идеале - как sql %)
Slava
В sql обычно есть уникальный первичный ключ
Wingman
ну, грубо, вот псевдокод:
m = map[key1, key2]SomeType
map[key1=a,key2=b] = SomeObj
а потом
obj := map[a]
obj := map[b]
Wingman
Wingman
ну то есть ключ может быть не один
Wingman
и уникальность не обязательна
Slava
Ну вообщем нет
Wingman
ну да, я понял
Slava
Но по сути вопроса - иметь свою презентацию в памяти того, что есть в базе - это гибельный путь
Slava
Любая субд сама поддерживает подобное представление в памяти
Wingman
хз, на каждый чих дёргать тоже не хочется
Slava
Этим и надо пользоваться
Slava
У тебя только один клиент у базы будет?
Wingman
скорее да, чем нет
Slava
Если нет, то ты на синхронизациях будешь в разв медленнее той же базы
Roman
Прошу прощения, но мб новичкам будет полезно https://t.me/studygo
Slava
Relatited :)
Wingman
Но по сути вопроса - иметь свою презентацию в памяти того, что есть в базе - это гибельный путь
ладно, совсем близкий к жизни пример, а то у меня абстракции непонятные получаются :)
Есть, например, какое-то сетевое оборудование
Оно опрашивается раз в какое-то время
При каждом опросе проверяется куча разных штук — например, по какому-то протоколу обнаруживаются соседи (такие же железки) на каждом порту свитча
на одной железке 50 портов ; у каждого порта - уже найденные ранее соседи ; при каждом опросе нужно смотреть — изменилось ли что-либо с предыдущего опроса, если да — обновлять данные в БД
таких железок - тысячи
при достаточно частом опросе - получится тупое непрерывное дрочево БД постоянной выборкой одних и тех же данных, в 99% случаев неизменных :(
Wingman
ну и да, так или иначе, в каком-то виде, всё равно мне нужно в памяти список оборудования держать, чтобы запускать его периодические опросы
Slava
А зачем в базу сохранять? Это где-то потом использоваться будет?
Wingman
да, конечно
Mister Tomato
навскидку - выглядит как обычная событийная модель, взять rabbitmq или кафку. В принципе можно попытаться модель твиттера натянуть на задачу - смотреть видео как твиттер это реализовал на редисе.
Wingman
гм, rabbitmq - это же про очереди и сообщения, а не про бд и кеш?
Mister Tomato
ну цель по сути обновлять бд после какого-либо события и если произошло какое-либо событие уведомить свех заинтересованных лиц, так?
Mister Tomato
с кешами засада в держании их в консистентном состоянии с базой и это сложно
Wingman
не совсем
яж не о событиях спрашивал изначально :)
Mister Tomato
ну хозяин - барин)
Wingman
Wingman
блин, а в го так не работает, чтоли?
`switch(...) {
case 1:
case 2:
doSomething
}`
Wingman
case 1 никогда не ловится
Wingman
всё, понял :)
Denis
Товарищи, есть тут кто активно контрибьютит в open-source?
Хочу влиться в проект.
Slava
Так выбирай любой
Васильев Виктор
Выбирай тот что тебе нравится. Или в тот что ты и так используешь
Васильев Виктор
Пользы больше будет
Alexander
Pawel
Pawel
>при достаточно частом опросе - получится тупое непрерывное дрочево БД постоянной выборкой одних и тех же данных
вам нужен твердотельный кеш для приборов.
Храните оборудование по значению в обычном слайсе,
Сделайте слайс потокобезопасным
Сделайте апдейт базы с подавлением "дребезга" (см. debounce)
Michael
Wingman
а сейчас что мешает это сделать?
да ничего, в общем-то ; это я возражал на "иметь свою презентацию в памяти того, что есть в базе - это гибельный путь"
Заур
Wingman
будет настраивабельно, но в среднем - опросы от раз в минуту до раз в 5 минут на каждую железку