@gogolang

Страница 882 из 1630
Wingman
03.03.2018
21:10:55
Погугли в сторону golang embedded in memory dB Есть несколько штук
Ага, спасибо, уже go-memdb пробую щупать)

но таки большинство инмемори - это key-value, а мне хочется мультикей

Slava
03.03.2018
21:20:46
Мультикей это как?

Google
Wingman
03.03.2018
21:21:44
да это я из головы слово взял

Slava
03.03.2018
21:22:20
А как оно в голове работает?

Wingman
03.03.2018
21:22:55
в идеале - как sql %)

Slava
03.03.2018
21:23:24
В sql обычно есть уникальный первичный ключ

Wingman
03.03.2018
21:23:42
ну, грубо, вот псевдокод: m = map[key1, key2]SomeType map[key1=a,key2=b] = SomeObj а потом obj := map[a] obj := map[b]

В sql обычно есть уникальный первичный ключ
в sql что угодно может быть ключем

ну то есть ключ может быть не один

и уникальность не обязательна

Slava
03.03.2018
21:24:50
Ну вообщем нет

Wingman
03.03.2018
21:24:57
ну да, я понял

Slava
03.03.2018
21:25:45
Но по сути вопроса - иметь свою презентацию в памяти того, что есть в базе - это гибельный путь

Любая субд сама поддерживает подобное представление в памяти

Wingman
03.03.2018
21:26:12
хз, на каждый чих дёргать тоже не хочется

Google
Slava
03.03.2018
21:26:16
Этим и надо пользоваться

У тебя только один клиент у базы будет?

Wingman
03.03.2018
21:27:04
скорее да, чем нет

Slava
03.03.2018
21:27:07
Если нет, то ты на синхронизациях будешь в разв медленнее той же базы

Anonchik
03.03.2018
21:27:09
Прошу прощения, но мб новичкам будет полезно https://t.me/studygo

Slava
03.03.2018
21:27:45
Relatited :)

Wingman
03.03.2018
21:32:31
Но по сути вопроса - иметь свою презентацию в памяти того, что есть в базе - это гибельный путь
ладно, совсем близкий к жизни пример, а то у меня абстракции непонятные получаются :) Есть, например, какое-то сетевое оборудование Оно опрашивается раз в какое-то время При каждом опросе проверяется куча разных штук — например, по какому-то протоколу обнаруживаются соседи (такие же железки) на каждом порту свитча на одной железке 50 портов ; у каждого порта - уже найденные ранее соседи ; при каждом опросе нужно смотреть — изменилось ли что-либо с предыдущего опроса, если да — обновлять данные в БД таких железок - тысячи при достаточно частом опросе - получится тупое непрерывное дрочево БД постоянной выборкой одних и тех же данных, в 99% случаев неизменных :(

ну и да, так или иначе, в каком-то виде, всё равно мне нужно в памяти список оборудования держать, чтобы запускать его периодические опросы

Slava
03.03.2018
21:39:35
А зачем в базу сохранять? Это где-то потом использоваться будет?

Wingman
03.03.2018
21:42:58
да, конечно

Viacheslav
03.03.2018
21:45:21
навскидку - выглядит как обычная событийная модель, взять rabbitmq или кафку. В принципе можно попытаться модель твиттера натянуть на задачу - смотреть видео как твиттер это реализовал на редисе.

Wingman
03.03.2018
21:46:48
гм, rabbitmq - это же про очереди и сообщения, а не про бд и кеш?

Viacheslav
03.03.2018
21:47:43
ну цель по сути обновлять бд после какого-либо события и если произошло какое-либо событие уведомить свех заинтересованных лиц, так?

с кешами засада в держании их в консистентном состоянии с базой и это сложно

Wingman
03.03.2018
21:48:24
не совсем яж не о событиях спрашивал изначально :)

Viacheslav
03.03.2018
21:48:40
ну хозяин - барин)

Wingman
03.03.2018
21:48:42
с кешами засада в держании их в консистентном состоянии с базой и это сложно
если обновления возможны только из одного источника, то более-менее

ну хозяин - барин)
я про организацию кешей скорее спрашивал :)

блин, а в го так не работает, чтоли? `switch(...) { case 1: case 2: doSomething }`

case 1 никогда не ловится

Google
Wingman
03.03.2018
21:52:12
всё, понял :)

Denis
03.03.2018
22:15:44
Товарищи, есть тут кто активно контрибьютит в open-source? Хочу влиться в проект.

Slava
03.03.2018
22:35:04
Так выбирай любой

Виктор
03.03.2018
22:52:19
Выбирай тот что тебе нравится. Или в тот что ты и так используешь

Пользы больше будет

Pawel
04.03.2018
08:18:53
>при достаточно частом опросе - получится тупое непрерывное дрочево БД постоянной выборкой одних и тех же данных вам нужен твердотельный кеш для приборов. Храните оборудование по значению в обычном слайсе, Сделайте слайс потокобезопасным Сделайте апдейт базы с подавлением "дребезга" (см. debounce)

Michael
04.03.2018
09:30:51
Wingman
04.03.2018
11:11:38
а сейчас что мешает это сделать?
да ничего, в общем-то ; это я возражал на "иметь свою презентацию в памяти того, что есть в базе - это гибельный путь"

Wingman
04.03.2018
11:13:12
будет настраивабельно, но в среднем - опросы от раз в минуту до раз в 5 минут на каждую железку

это куча запросов: выборка самой железки, кучи её параметров, компонентов, связей

Zaur
04.03.2018
11:18:31
Скорее всего, Вы зря беспокойтесь об этом. Современные БД удивительно производительны, единственное может Вам придётся немного времени уделить правильному проектированию таблиц и индексов

Eugene
04.03.2018
11:18:39
@wingz может это вам подойдет https://tarantool.io/en/product/unwired-iiot.html

Zaur
04.03.2018
11:18:58
Попробуйте сначала без кеша

Wingman
04.03.2018
11:19:57
Попробуйте сначала без кеша
я примерно представляю и уже делаю без кеша :) но сами по себе бессмысленные массовые непрерывные выборки - не нравятся и хочется избежать

@wingz может это вам подойдет https://tarantool.io/en/product/unwired-iiot.html
возможно, спасибо, погляжу ; если там не простое key-value, то очень может быть

Eugene
04.03.2018
11:21:57
там не key-value, есть будут вопросы -то можно поспрашивать тут https://t.me/tarantoolru

Google
Wingman
04.03.2018
11:22:52
#wingz
(для поиска позезностей)

Pawel
04.03.2018
11:43:06
да ничего, в общем-то ; это я возражал на "иметь свою презентацию в памяти того, что есть в базе - это гибельный путь"
насколько я понимаю там речь шла о другом - в кеше нужно держать то, и только то, что непосредственно востребовано в приложении, а не полностью всю базу пытаться туда запихнуть

Wingman
04.03.2018
11:43:46
ну так а если у меня вся база работает на это приложение? :)

Zaur
04.03.2018
14:12:11


Ребзя, встречайте гостя

Admin
ERROR: S client not available

Denis
04.03.2018
18:28:28
Товарищи, пробую tcp read write в redis, отвечать мне вообще не хочет. Есть идеи почему такое может быть? При этом telnet получает ответ

Pawel
04.03.2018
18:37:56
ну так а если у меня вся база работает на это приложение? :)
обычно так и есть, Из этого не следует что всю базу надо держать в памяти, или что структуры данных приложения обязаны быть идентичны структурам данных в БД. Например, список оборудования может быть в приложении в виде списка интов

The
05.03.2018
00:42:59
Подскажите, есть ли отстойность в таком решении. На вход в функцию подаю канал значений, внутри функции проверяю на существующие значения в базе (мне нужны только новые), на выход из функции отдаю канал из новых значений.. в цикле прямо так и делаю: for item := range values { // check if item is new newValues <- item } return newValues

The
05.03.2018
00:58:54
да, он там обернут, забыл упомянуть :)

Zver
05.03.2018
00:59:35
Zaur
05.03.2018
00:59:38
И newValues должен передаваться в функцию

The
05.03.2018
01:01:16
И newValues должен передаваться в функцию
это для чего?) я же этот канал возвращаю, по сути своеобразный пайп получается

The
05.03.2018
01:02:39
я кстати закрыть канал забыл, вот это уже косяк

Zver
05.03.2018
01:02:50
это для чего?) я же этот канал возвращаю, по сути своеобразный пайп получается
Не надо. По ссылке как раз создаются внутри. https://blog.golang.org/pipelines

я кстати закрыть канал забыл, вот это уже косяк
По ссылке выше как раз почти ваш случай описан.

Zaur
05.03.2018
01:04:08
Асинхронно запущенная функция возвращает новый канал?

Google
Zaur
05.03.2018
01:04:20
Я что-то перестал понимать

The
05.03.2018
01:04:25
нет, она без go запущена

https://i.imgur.com/AFTk3jd.png

вот так

Zver
05.03.2018
01:05:12
Zaur
05.03.2018
01:05:14
Ааа, все, дошло ))

The
05.03.2018
01:05:50
спасибо за фидбек, господа!

Zaur
05.03.2018
01:07:08
А разве для go не надо передавать переменные в функцию все равно?

The
05.03.2018
01:07:44
если go внутри for

а тут for внутри go :)

Zver
05.03.2018
01:08:29
А разве для go не надо передавать переменные в функцию все равно?
Если как замыкание используется, то не обязательно.

Zaur
05.03.2018
01:08:57
Ясно, спс)

The
05.03.2018
01:09:29
он видимо имеет ввиду когда for а потом спавним горутину на каждый элемент цикла, тогда нужно в функцию аргументами передавать, если тип не ссылочный

хотя гоню, там даже не от ссылочного типа зависит.

там все нужно передавать через аргументы функции в горутину

Zver
05.03.2018
01:12:20
Ясно, спс)
Пример кода из pipeline pattern на эту тему. func sq(in <-chan int) <-chan int { out := make(chan int) go func() { for n := range in { out <- n * n } close(out) }() return out }

Страница 882 из 1630