Несин Данила
И Fatal лучше не использовать, а обработать самому и решать, что делать, коммутаторы тоже часто не отвечают, чтобы код не ломался.
Еще не знаю, как оно так получилось но работает! 30 коммутаторов 10 воркеров проходят за 2-5 секунд, что очень хорошо и быстро. Воркер в моем случает это получается обертка над функцией, которая берет данные из канала, обрабатывает функцией и отдает данные в канал. Как понимаю у меня возможно была архитектурная ошибка, которая блокировала части приложения вызывая лишнюю задержку и заставляя протухать подключения. Еще раз благодарю и иду читать по организации пула воркеров.
Несин Данила
Да, она берет задачу из канала(имя коммутатора) и отдает результат в другой канал
Единственно, что заметил - при увеличении числа воркеров, например до 20-30 может произойти увеличение времени обработки данных. Т.е. ситуация, когда некоторые рабочие будут без работы в любом случае. С чем эта обратная задержка могла бы быть связанна?
Alexander
я бы кстати попробовал все-таки без воркеров и на спавн горутин переделать. не должно быть хуже в твоем случае. это там если 100500 заданий, то фиксированные воркеры полезны
Несин Данила
на сколько?
Timeout 15s, а замедление обработки где-то в этих пределах
Alexander
сколько адресов?
Несин Данила
сколько адресов?
https://pastebin.com/TGaqM7Vi 27 адресов, 20 воркеров
xasai.denet
Тут все от дела зависит. Вот хорошая статья на эту тему https://medium.com/@val_deleplace/go-code-refactoring-the-23x-performance-hunt-156746b522f7
Alexander
там нагрузка прям такая лютая шопесдец. мб только если это дело все на распберри пай каком
Alexander
есть, если у тебя IO
Maxim
От таймаута сети и заканчивая чем угодно это может быть...
Alexander
есть, если у тебя IO
и в случае автора как раз должна и 1000 таких одновременных запросов работать нормально (чего там? открыть сокет, пару байтиков туда, пару байтиков сюда). странно, что получается такой результат
Несин Данила
@edwvee, @shinanca хорошо попробую завтра сделать тоже самое на простых горутинах, без обертки в виде воркеров и сравнить результаты
Alexander
ну я про это и говорю
Gilbert
https://www.linkedin.com/feed/update/urn:li:activity:6841733921806405632/
Alexander
а кто-нибудь объяснит фишку, что latency при установлении tcp соединения к localhost ощутимо выше(десятки процентов), чем к 127.0.0.1? в качестве сервера гошка (fasthttp, net.Listen), а клиента пыха (curl и fsockopen соответственно). проверялось на centos и clear linux. большее кол-во экспериментов делать было лень теперь что ли все localhost переписывать на 127.0.0.1?
Alexander
Println
Alexander
ааа
Alexander
ну сделай чтобы цикл не обходил последний четный элемент и выводи его руками
Alexander
отдельно в смысле, без пробела
Alexander
лучше тогда строки сразу считывать
Alexander
fmt.Printf("%v", true_slice)
👀
https://golangdocs.com/variadic-functions-in-golang См: pack and unpack operator
Alexander
Если б твою задачу так можно было решить, ее бы тебе и не давали
𝓢𝓮𝓻𝓰𝓮𝔂
package main import ( "fmt" ) func main() { a:=[]interface{}{1,2,3} fmt.Println(a...) }
𝓢𝓮𝓻𝓰𝓮𝔂
)
Alexander
Нормъ)
Michael
Попробуй fmt.Print(sliece[i], " "), Можно ссылку на курс/степ?
🔥
Правильные реализации gethostbyname видят такие запросы и автоматом отдают лупбэк адрес, но не все. Видать у тебя именно "неправильная" реализация в системе
🔥
Зачастую проверить такое можно изменив запись в /etc/hosts у локалхоста, если при лукапе он отдает запись именно оттуда значит что у тебя тебя версия без автоматического определения лупбэк адресов
Michael
ну, у меня приняли такое ( fmt.Print(workArray[i], " ") ) (https://stepik.org/lesson/228265/step/5?unit=200798)
Alexander
Могу предположить что перед подключением он делает лукап localhost-а чтоб ИП вытащить
Я вот кстати гугля нашел наоборот, что якобы локалхост быстрее, ибо система заменяет обычный тсп сокет на юникс сама
xasai.denet
Шарящие, подскажите, в какую SQL таблицу стоит и не стоит добавлять индексы. 1. Таблица с редко изменяемыми данными, и ее поля будут редко запрашиваться. 2. Таблица которая чаще всего будет меняться, запрашиваться и тд
Alexander
От потребности в скорости чтения зависит. Когда-нибудь у тебя будет вариант, когда без индекса будешь ждать секунды-минуты, и вопрос отпадет сам собой
xasai.denet
понил , сенкс
xasai.denet
а есть такая тема, что на primary key postgres сам добавляет этот индекс?
xasai.denet
или это миф в моей голове
Alexander
1 вариант если очень в запись упираешься, не надо уникальных индексов и первичных ключей посмотри кликхаус - скорость записи батчами сказочная, скорость поиска без индекса в миллионах строк в сотни раз быстрее обычных субд
Emil
Индексы нужно прописывать вроде, и нужно прописывать, если оно имеет смысл(не шарю, что сам где-то прочитал, транслирую)
xasai.denet
CREATE TABLE IF NOT EXISTS users ( id uuid PRIMARY KEY; ); CREATE INDEX IF NOT EXISTS idx_user_currency_user_id ON users (id);
xasai.denet
я имею ввиду нижнюю строку
xasai.denet
надо пистаь
Alexander
Нет
xasai.denet
если стоит primary key
xasai.denet
ok
xasai.denet
thx
Alexander
По сути без индексов в реальной жизни чтение не происходит. Но тут можно долго говорить
xasai.denet
В доке только найти не могу где это написано(
xasai.denet
xasai.denet
Найдено
Alexander
https://www.postgresqltutorial.com/postgresql-primary-key/
Maks
А зачем индекс на примари кей делать
Alexander
When you add a primary key to a table, PostgreSQL creates a unique B-tree index on the column or a group of columns used to define the primary key.
Maks
Помимо б-три индексов есть еще гист и гин. Индексы так же можно делать на конкретные жсон поля в колонке.
Maks
Индексы увеличивают размер занимаемый базой, замедляют вставку данных немного
Maks
И изменение тоже вроде
Alexander
И изменение тоже вроде
Если индексируемые поля меняешь. В теории
Maks
Но это несравнимо с пользой от ускорения поиска в очень больших таблицах
Maks
Когда в одном случае приложение падает по таймауту из за слишком долгого запроса в бд(не успевает за таймаут отдать ответ клиенту), а в другом ответ отдастся за 20 секунд например
Maks
У пагинации тоже есть свои нюансы когда идешь на какую то очень далекую страницу через оффсет
xasai.denet
У меня пока все очень простенько, но думаю и до этого дойду)
xasai.denet
спасибо для пищу для мозга
xasai.denet
за *
Alexander
Вообще советую, как разберёшься более менее с sql на уровне сделать что-то, начни бенмаркать запросы, наполнять базу ощутимым количеством записей, играться с индексами. Без этого понимания не будет
Alexander
У меня знакомый положил сайт на нормальном железе, добавив один селект и не проставив под него индекс)
Alexander
Хотя в программировании при этом не Джун далеко был
Suleiman
Ребят, firebase это типа готовый бэк? Для стартапов?
xasai.denet
хы) Ну я только начал ковырять по работе. Думаю если что-то серьезно не так сделаю, то дадут по рукам заранее. Все равно - лучше ошибаться и учиться, чем не ошибаться и учиться)
Maks
У меня знакомый положил сайт на нормальном железе, добавив один селект и не проставив под него индекс)
Еще добавление индексов в существующую большую таблицу может на час+ положить сервак) из за чего очередь положит сервак по аут оф мемори)
xasai.denet
Еще добавление индексов в существующую большую таблицу может на час+ положить сервак) из за чего очередь положит сервак по аут оф мемори)
В таких ситуациях load balancer используют ведь? несколько реплик базы, и допустим, пока одна будет индексировать, вторая будет делать работу, а потом они поменяются? Или как это решается?
Alexander
так есть же онлайн добавление
Maks
Вроде так пишется
Maks
Позволяет не блокируя таблицы производить индексацию