
Andrey
22.08.2016
14:10:12
тогда напиши свой exchange для rabbitmq

Konstantin
22.08.2016
14:10:15
а через proxy это если делать - то на каждую операцию записи придется делать заход в очередь, аггрегирование и запись результата уже назад

Andrey
22.08.2016
14:11:42
omg

Google

Dmitry
22.08.2016
14:11:54
Тогда можно наверное

Andrey
22.08.2016
14:12:07
не уверен что оно подойдет
там ничего же нет про аггрегацию
там только stateless-скрипты вроде, или я невнимательно прочел

Dmitry
22.08.2016
14:15:25
Записать назад чтобы опять в том же эликсире прочитать?

Konstantin
22.08.2016
14:16:58
Ну так я ищу решение для стриминга, т.е. real time агрегации по сути. Быстрее же вынуть уже аггрегированные данные и с ними работать, чем вынуть кучу неагрегированных записей и в памяти их потом обрабатывать

Andrey
22.08.2016
14:17:38
можно синтетический пример
а то не очень понятно что же именно за агрегация

Konstantin
22.08.2016
14:18:13
Данные по статистике. Кол-во просмотров чего-либо, например

Dan
22.08.2016
14:18:16
Элексир и бигдата дружат?

Andrey
22.08.2016
14:18:22
оконная функция какая-то? или просто счетчик накапливается?

Google

Konstantin
22.08.2016
14:18:40
Ну грубо говоря счетчик.
Там арифметики сложной нет

Dmitry
22.08.2016
14:19:11
Мне кажется, если rabbitmq сервер работает на той же beam, что и твоя программа, то ничего ты быстрее не получишь. Без разницы, твой велосипед самописный для агрегации будет вызываться через сервер rabbit или через твой эликсир пап

Andrey
22.08.2016
14:19:38
имхо, в брокере очереди это делать overkill

Dmitry
22.08.2016
14:19:54
А если для rabbit написать аггрегатор на руби - то ещё и медленнее

Andrey
22.08.2016
14:20:18
nif написать можно, я думаю

Can
22.08.2016
14:20:20
Нативно, конечно либы искать придется, но сейчас есть influxDB для time-series данных, которая сама умеет агрегирование делать
мне нужна message queue, но которая будет уметь аггрегировать данные, которые в нее кладут.
чтобы я забирал уже аггрегированные данные, а не вынимал по каждой записи и аггрегировал уже потом в памяти сам.
и чтобы elixir/erlang смог эти записи аггрегированные вынимать оттуда
influx активно поддерживается сейчас, написан на Go

Konstantin
22.08.2016
14:21:07
Rethinkdb еще есть
Но чет она доверие не внушает
имхо, в брокере очереди это делать overkill
Да нет, почему. Стриминг же не зря появился. Просто когда к тебе сыпится грубо говоря 2-3к. сообщений в секунду, то одно дело вынимать 400-500 аггрегированных сообщений в секунду и перегонять эти данные дальше уже, чем все это дело в памяти вертеть постоянно. Так и памяти то может не хватить

Andrey
22.08.2016
14:24:59
а зачем вертеть?

Dmitry
22.08.2016
14:25:16

Andrey
22.08.2016
14:25:42
консьюмишь из rabbitmq с каким-то префетчем, агрегируешь, делаешь что еще нужно

Can
22.08.2016
14:26:13
Потому что amqp обеспечивает персистентность и гарантию доставки

Dmitry
22.08.2016
14:26:57
Данные идут через локалхост - это по сути сокет, написанный на с в ядре линухи - максимально быстрая штука
Есть оверхед по размеру данных, по количеству сообщений. Но какими способами будет агрегация внутри самого брокера? Скорее всего так же данные будут либо передаваться через эрланг порт, или через сокет.

Konstantin
22.08.2016
14:46:51

Google

Konstantin
22.08.2016
14:47:33
В этом же смысл всяких rethinkdb, lua скриптов на redis и прочих решений

Andrey
22.08.2016
14:48:21
а когда ты внутри брокера делаешь, придется же делать тоже самое, разве нет?

Konstantin
22.08.2016
14:48:34
Так я не знаю как это делается внутри брокера )

Dmitry
22.08.2016
14:48:42

Konstantin
22.08.2016
14:49:08
В redis это делается через lua скрипты, которые как я понимаю компилируются потом во что-то. В рэббите не знаю.

Dmitry
22.08.2016
14:49:31
Брокер находится на планете Манна, там 23 года идут один день)))

Konstantin
22.08.2016
14:49:39
Может быть ))

Can
22.08.2016
14:50:51
Ну в InfluxDB нативная агрегация на Go, оверхеда на tcp передачу нет даже
Вообще внутри брокера нет оверхеда на трансфер данных

Konstantin
22.08.2016
14:51:08
Смотри, тут 3 момента:
1. Когда ты это делаешь в брокере - ты не тратишь время на передачу данных по сети в твое приложение, а делаешь сразу все в памяти
2. Ты аггрегацию делаешь по одному сообщению. Т.е. прежде чем добавить - ты ищешь месседж такой же и просто соединяешь два мессаджа в один
3. Если грохнется брокер - ты данные сохранишь на диске (почти все), а если твоя приложуха, то до свидания

Dmitry
22.08.2016
14:51:52
Возможно, но тут опять же зависит от реализации.

Konstantin
22.08.2016
14:52:09
4. Как саму агрегацию делать то? Держать в памяти список из 50 тыс. элементов и доставая сообщение по одному каждый раз пробегаться по списку?

Dmitry
22.08.2016
14:52:37
Ну, если ты раз в полчаса данные забираешь - то возможно это проблема

Andrey
22.08.2016
14:52:51
почему по одному то?

Konstantin
22.08.2016
14:52:53
В брокере ты знаешь, что у тебя в данный момент в очереди. А в твоем демоне ты этого не знаешь - приходится пачками доставать сообщения и бегать по ним в памяти. Вот отсюда и оверхед идет

Andrey
22.08.2016
14:53:03
prefetch 1000 и будешь вынимать по 1000 сообщений

Konstantin
22.08.2016
14:53:35

Dmitry
22.08.2016
14:53:43
На самом деле тут вопрос просто в конкретной реализации
Я например полагаю, что луа скрипты выполняются каким то интерпретатором луа, который передаёт сообщения через тот же файловый дескриптор терминала, а для локалхоста что сокет что ttl -скорость одинаковая

Google

Dmitry
22.08.2016
14:55:23
Другое дело если у тебя брокер и твой комп соединены через GSM модем
Да, есть разница пуша и пула, но я думаю что процесс эрланге в состоянии пулить сообщения со скоростью их появления

Andrey
22.08.2016
14:58:55
смотри в rabbitmq exchange это просто функция которая принимает сообщение и его header-ы и возвращает сообщение и хидеры. Внутри можно каких угодно сайд-эффектов нагородить, насколько совести хватит. Так что ничего невозможного нет, но я всё равно не вижу ощутимого профита. Но ты можешь попробовать и нам потом расскажешь =)

Dmitry
22.08.2016
14:59:53
Просто у меня было такое - два компа соединены GSM модемом и раз в день один из компов "звонит" другому и забирает данные) вот там надо было все на месте агрегировать, гзип и всякая такая хрень

Andrey
22.08.2016
15:01:03
подсмотреть реализацию можно тут: https://github.com/videlalvaro/rabbitmq-recent-history-exchange-elixir

Konstantin
22.08.2016
15:02:09

Andrey
22.08.2016
16:24:15
Ни у кого на github не завалялся бот для телеграмма, хочется посмотреть как оно там (с использованием Nadia)

Dmitry
22.08.2016
16:25:31
Вроде как

Admin
ERROR: S client not available

Dmitry
22.08.2016
16:25:43
Так что лучше пока что писать на руби)

Andrey
22.08.2016
16:26:20
Да хочется на Эликсире что-нибудь попробовать

Vladimir
22.08.2016
16:34:50
Ну, функция вроде есть.

Dmitry
22.08.2016
17:54:18
Как то там хитро
Надо самому сервер мутить
Я думал запилить через стейдж для неё пул
Но пока что на вкапи залип )
Куча идей, двигается туго - работы много ))

Alexander
22.08.2016
22:43:29

Google

Alexander
22.08.2016
22:43:31
сильно
если это не уметь делать, то какой в жопу генстейдж?
эликсир бот кстати шустрее рубишного прямо в разы
вот мой небольшой бот: @MedotvetBot

Константин
23.08.2016
01:27:35
Чет бот на кнопку цены не реагирует

Alexander
23.08.2016
01:37:45
на инструкцию иногда не пашет, т.к там бывают километровые инструкции
в любом случае, бот был сделан как шоукейс эликсира для ppph.ru

Константин
23.08.2016
01:55:56
Да, он нашел лекарство, но цены не смог отобразить))

Alexander
23.08.2016
02:03:26
бот питается базой данных и возможно там что-то не так пошло )

Dmitry
23.08.2016
04:06:02

Alexander
23.08.2016
04:06:56
а либа самая продвинутая для эликсира
опять же, я просто поглядел, как в друих сделано и все )

Dmitry
23.08.2016
04:14:58
опять же, я просто поглядел, как в друих сделано и все )
Ну в принципе в руби так и сделано... Йилдиься просто сообщения которые в цикле забираются. Но тут же эликсир, можно по крутому менять на реактив. К примеру получать месседжи на ящик пула процессов отдельных для каждого диалога, или тот же стейдж - это уже как в руби. Короче говоря допиливать надо - это то что я имел ввиду

Alexander
23.08.2016
04:15:54
не забывай, что поллить можно только 1 раз, остальные запросы отстреливает их сервер. И там просто стрим всего
особо не развернешься, все равно нужно пилить 1 поллер и из него уже раскидывать
у меня просто под типы крутятся процессы, которые получают на ящик их мессаги, там же и имплементация. Звучит круто, по факту какое-то говно получилось

Dmitry
23.08.2016
04:17:35