@gogolang

Страница 127 из 1630
Kanybek
17.02.2017
13:33:33
Вот на этом: tx := db.MustBegin()

Alexander
17.02.2017
13:34:13
Mo, вот о том я и говорил. panic: pq: sorry, too many clients already Делай все в одной транзакции тогда и коммить периодически, или по времени последнего коммита, или по количеству звыполненных запросов, по ситуации

Слава, код вот такой https://github.com/aadz/gopp Куча мютексов, просто хотя бы чтобы акуратно считать статистичку. И, вроде, работает для моих нужд. Но отцы ругают

Google
Kanybek
17.02.2017
13:42:24
В соседней группе такое решение посоветовали, буду тестить

funct dbwriter(db DB) { for data := range datachan { db.Insert(data) } } func main() { go func() { for { datachan <- data } }() go func() { for { datachan <- data } }() go func() { for { datachan <- data } }() }

Alexander
17.02.2017
13:43:33
Mo, я то же самое посоветовал, по сути. Ты просто не услышал.

но я бы не стал ТАК это делать.

i
17.02.2017
13:47:32
Слава, код вот такой https://github.com/aadz/gopp Куча мютексов, просто хотя бы чтобы акуратно считать статистичку. И, вроде, работает для моих нужд. Но отцы ругают
Кстати, можно вместо Mutex использовать RWMutex и при чтении делать RLock, при одновременном чтении эти области не будут лочиться

Vladimir
17.02.2017
13:48:21
https://www.reddit.com/r/golang/comments/5uj13w/chrome_extension_that_replaces_occurrences_of/

Ivan
17.02.2017
13:49:44
Неплохое да

Но зачем скрывать боль если ей можно упиваться

Alexander
17.02.2017
13:51:19
I'm да не. Мне надо их лочить при записи, чтобы никто не читал. Читают дико редко, а пишут - часто. Но я тормозов что-то не заметил, если честно. А Сишники сказали - тормозной код с такими мютексами

Хотя, мютексы - это не про Go, это про UNIX в общем. Но, они работабают, что не может не радовать. :)

Google
Alexander
17.02.2017
13:55:46
Это идея распараллелить коннекты. Но все равно, каждом коннекте все придется делать в рамках транзакции.

Daniel
17.02.2017
13:56:16
а у нас есть средства регулировать размер пула коннектов в sql?

впрочем - тут пул устроен иначе, чем в java

там ты явно забираешь соединение, и явно отдаешь

Alexander
17.02.2017
13:57:20
Библиотека не права и не не неправа. Она просто предоставляет сервис слишком низкого уровня. А это не сразу все программисты на PHP могут понять.

Vladimir
17.02.2017
13:58:08
Daniel
17.02.2017
13:58:26
впрочем, тут ты тоже явно забираешь соединение, когда открываешь транзакцию

Alexander
17.02.2017
13:58:34
И, кажется,некоторые вещи в SQL-библиотечке называются слишком многообещающе, что как раз неправильно

Daniel
17.02.2017
13:58:51
можно на атомиках и sleep устроить блокирование и лимитирование числа коннектов

https://godoc.org/database/sql#DB.SetMaxOpenConns
а, так надо его покрутить до разумного ограничения, и та паника исчезнет

Alexander
17.02.2017
14:00:18
мне вот так и не удалось что-то сдеать так, чтобы запросы по доступным коннектам распределялись, а если доступных нет - ждали. Кажется, SQL-библиотека этого как раз и не умеет.

Она умееет открыть столько коннектов, сколько сможет, а потом подохнуть :(

Daniel
17.02.2017
14:01:04
ммм

как-то так получилось, что меня это не коснулось

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

но тогда - атомик и слип

или даже нет

канал же!

Ivan
17.02.2017
14:03:16
канал запросов льем туда и выгребаем так ведь?

Например через n секунд или m запросов комитим

Google
Alexander
17.02.2017
14:04:20
А никакого бесконечного количества рутин и не надо. Она сама наоткрывает тебе столько, сколько обработать потом сама же и не сможет. Просто это не pool, на самом деле, а просто список коннектов.

Alexander
17.02.2017
14:05:07
И есть тупо метод не делать так много коннектов. Держать все в пределах транзакции. На транзакцию будет один коннект хотя бы :(

Daniel
17.02.2017
14:05:09
если это не так - у нас все равно проблемы

поэтому, собственно, и нет ничего такого в стандартном пуле - не требуется

но именно в случае с транзакциями возможны блокировки и всплески

поэтому, если уж возникла проблема, нао как-то буферизовать запросы

Alexander
17.02.2017
14:06:48
Если тебе надо программным (сложным) образом поменять значение какого-то поля в табличке со 15 миллионами записсей, и ты не делаешь это в транзакции - да, в Go это у тебя проблема... :(

Даниэль, не о буферизации речь. Буферизация там как раз есть. И открытие рутины не по делу с новым коннектом к базе. Речь о том, что работает это не так, как ожидалось

И это, кажется миллион раз уже обсуждалось везде... Дизайн не самый удачный у этой библиотеки, в общем

Daniel
17.02.2017
14:11:34
ну - он просто низкоуровневый

проблему не заметают под ковер

но возникает проблема не в либе, а в дизайне снаружи

Alexander
17.02.2017
14:13:21
низкоуровневый дизайн? хм... хорошо сказано. :)

Sergey
17.02.2017
14:25:48
/voteban

Anton
17.02.2017
14:28:38
sudo voteban

Andrew
17.02.2017
14:30:27
Не работеат, похоже нужно сначала сделать sudo apt-get install voteban

Sergey
17.02.2017
14:30:32
...форумы...а они разве живы где-то кроме даркнета? )

Andrew
17.02.2017
14:30:56
Дык этот форум косит под даркнет

Alexander
17.02.2017
14:31:26
форумы - нет, а спамеры со своими "лучшими форумами" - все еще да :(

Google
Alexander
17.02.2017
14:33:30
Андрю туда даже зашел, видимо. И что там? Пипиську обещают, как обычно, увеличивать на 15 сантиметров в месяц? Интересно, как эта пиписька будет смотреться хотя бы через полгода...

i
17.02.2017
14:35:34
нет.

Sergey
17.02.2017
14:37:58
+

Andrew
17.02.2017
14:38:28
> go call admin

Я гофер, ничего не понял.

Похоже на то

Slach
17.02.2017
14:43:10
https://www.facebook.com/permalink.php?story_fbid=722477891241449&id=100004377340065 Подскажите, пожалуйста, как в Go, прочитать читать UDP-пакет вместе с адресом отправителя без выделения памяти? (*UDPConn) Read() - читает без выделения памяти, но не возвращает адрес. (*UDPConn) ReadFrom() и (*UDPConn) ReadFromUDP() возвращают адрес, но при его создании в (c *UDPConn) readFrom() выделяется память для создания объекта адреса и в syscall.(*RawSockaddrAny).Sockaddr() выделяется память при создании сокета, из которого потом достаётся адрес. Т.е. два совершенно лишних копирования с аллокацией памяти. И это основные источники аллокаций в коде. Можно достать файловый дескриптор через (c *UDPConn) File() и что-то самому делать, не опускаясь до уровня сисколов. Но как достучаться до нужных методов?

Alexander
17.02.2017
14:44:02
Прочитать без выделения памяти? Прямо целый UDP-пакет?

Mike
17.02.2017
14:44:30
Тогда возникает закономерный вопрос "прочитать КУДА?"

"читает без выделения памяти, но не возвращает адрес" — адрес чего?

Alexander
17.02.2017
14:45:11
Для начала возникает вопрос о том, что такое "прочитать"

Slash, что уже ты таки имел в виду сказать?

(если ты умеешь читать, конечно)

Mike
17.02.2017
14:47:17
он читает наши сообщения без выделения памяти

и потому не может ответить

Alexander
17.02.2017
14:47:57
печалька кокая :(

Daniel
17.02.2017
14:48:53
коллеги

ну вы это

ядро выделяет буфер, и читает данные в него

Google
Alexander
17.02.2017
14:49:52
а... как написать UDP-пакет без выделения памяти?

Daniel
17.02.2017
14:49:57
дальше можно этот буфер без копирования передавать туда-сюда, и даже ответ в него положить, и снова передать ядру для отправки

Mike
17.02.2017
14:50:28
ну не кажется ли тебе, что общение с ядром с одной строны и желание не трогать сисколлы с другой несколько противоречат друг другу?

Alexander
17.02.2017
14:53:31
Да хрен с ними с сисколами и ядром. Главное, как память-то не выделять на каждое заходящее UDP, но читать его и долго потом думоть?

Daniel
17.02.2017
14:54:04
Да в чем поблема-то?

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