Size: a a a

2019 September 02

🐱

🐱 Rough Cat in pro.elixir
Alexander Kulikov
ребята, подскажите как преобразовать файл в BLOB, надо его в БД засунуть
постгре позволяет сразу файл грузить
источник

VI

Victor Ivanov in pro.elixir
Привет!

Ребят, такой вопрос – насколько плохо делать вот так:
Task.start_link(fn -> ViewerPresence.log_subscribe(subscription_id) end)


ViewerPresence.log_subscribe это просто INSERT в БД.

Таск вызывается на коннект к каналу в Фениксе, то есть в определенные моменты это может быть довольно часто происходить, но вряд ли чаще 300-500 раз в минуту
источник

AS

Alik Send in pro.elixir
Не лучше ли запоминать в памяти количество, а раз в минуту записывать в бд?
источник

VI

Victor Ivanov in pro.elixir
мне нужна одна запись на один ивент
источник

VI

Victor Ivanov in pro.elixir
это не каунтер
источник

VI

Victor Ivanov in pro.elixir
Нужен ли мне здесь какой-то менеджер процессов чтобы не спавнить процессов больше, чем Х?
источник

VI

Victor Ivanov in pro.elixir
и чем этот Х может быть обусловлен? (То есть что крутить в настройках)
источник

AS

Alik Send in pro.elixir
Можно сделать пул процессов, но если спавнится будет очень много, то очередь будет расти и сообщение будут обрабатываться очень долго. Можно сохранять в памяти, в массиве, а вставлять в базу пачкой по крону.
источник

AS

Alik Send in pro.elixir
Вы можете сделать пул на 500 процессов, если знаете что чаще всего их меньше 500. Сама цифра зависит наверное от того, сколько запросов к базе она может переварить
источник

VI

Victor Ivanov in pro.elixir
Я как бы понимаю, что можно, мне интересно понять, нужно ли.
источник

AS

Alik Send in pro.elixir
Alik Send
Вы можете сделать пул на 500 процессов, если знаете что чаще всего их меньше 500. Сама цифра зависит наверное от того, сколько запросов к базе она может переварить
Если у вас постоянно по 500 запросов, А вы сделаете пул на 100, то очевидно что это не буду работать. Если у вас обычно 100, а иногда 500, и вы сделаете на 150, то сообщения рано или поздно будут разгребаться
источник

AS

Alik Send in pro.elixir
Victor Ivanov
Я как бы понимаю, что можно, мне интересно понять, нужно ли.
Понял. С этим наверное не подскажу.
источник

VI

Victor Ivanov in pro.elixir
Ну да, мне скорее тут интересны фейл истории, типа не ограничивали и случилось то-то. В принципе, могу и сам дождаться, но если есть вот прям какие-то приниципы, то был бы рад сразу соломку подстелить.

Я танцую от того, что у Экто должен быть пул коннектов к БД, и по идее они просто в очередь должны выстроиться, и все
источник

VI

Victor Ivanov in pro.elixir
меня такое поведение устроило бы, потому что пиковая нагрузка обычно на начале семинара, а дольше народ сидит и смотрит, и коннектов/дисконнектов мало
источник

AB

Alexander Bogosyan in pro.elixir
а мне вот интересно имеет ли смысл воркеров из пула отправлять в hibernate после того как они отработали
источник

VS

Vladimir Sekisov in pro.elixir
если их всего 500, то это экономия на спичках,
да и здесь задача не для
пула воркеров, а для
ограничителя лимита,
типа jobs или safetyvalve
источник

AB

Alexander Bogosyan in pro.elixir
Vladimir Sekisov
если их всего 500, то это экономия на спичках,
да и здесь задача не для
пула воркеров, а для
ограничителя лимита,
типа jobs или safetyvalve
я чисто из соображений память освободить
источник

VS

Vladimir Sekisov in pro.elixir
много они не занимают,
смысл идти на hibernate,
, думаю, только если
число таких процессов десятками тысяч исчисляется
источник

VS

Vladimir Sekisov in pro.elixir
ну или у вас embedded балалайка с жестокими ограничениями
источник

АН

Алексей Новоселов in pro.elixir
Victor Ivanov
Ну да, мне скорее тут интересны фейл истории, типа не ограничивали и случилось то-то. В принципе, могу и сам дождаться, но если есть вот прям какие-то приниципы, то был бы рад сразу соломку подстелить.

Я танцую от того, что у Экто должен быть пул коннектов к БД, и по идее они просто в очередь должны выстроиться, и все
инсерты в базу лучше последовательно делать и, желательно пачками. Но в вашем случае это сильно преждевременная оптимизация. Т.к. при инсерте пачками производительность MySQL вырастает примерно так:
40,000 → 247,000 inserts / second on localhost
12,000 → 201,000 inserts / second over the network
Процессы спавнить все равно нужно, если нужно запускать асинхронно. Благо они легковесные и в вашем случае короткоживущие, так что проблем быть не должно.
источник