Size: a a a

2020 February 27

RS

Roman Sharkov in Go-go!
Daniel Podolsky
например - каким алгоритмом мы делаем сведение конфликтующих данных
ну это уже strong consistency guarantees, которые опять же не всегда нужны
источник

DP

Daniel Podolsky in Go-go!
pragus
Всмысле "построить"? Сейчас на nvme за гуманные деньги можно получить 4-6 млн iops.
я в процессор упрусь, к сожалению. индексы пересчитывать
источник

DP

Daniel Podolsky in Go-go!
Roman Sharkov
ну это уже strong consistency guarantees, которые опять же не всегда нужны
не-а, это все та же eventual. просто та же cassandra, которая на время опирается, сходится далеко не всегда
источник

RS

Roman Sharkov in Go-go!
дам очень банальный пример:

казалось бы что в интернет магазине при покупке мы должны транзакционно проверить наличие товара на складе и если его нет - отдать ошибку. На самом же деле выгоднее просто создать заказ, а потом, при его выполнении, если товара нет, просто оповестить клиента о том, что данного продукта на складе сейчас нет и предложить ему подождать ещё пару дней (возможно даже предложив скидку за неудобство). Чаще подобный подход (compensating action) выгоднее бизнесу и не требует strong consistency, главное лишь атомарно записать заказ, а это скейлится гораздо лучше
источник

p

pragus in Go-go!
Daniel Podolsky
я в процессор упрусь, к сожалению. индексы пересчитывать
И тут возникает вопрос: а точно они там нужны или фуллскан на таком железа будет быстрее? )
источник

p

pragus in Go-go!
Roman Sharkov
дам очень банальный пример:

казалось бы что в интернет магазине при покупке мы должны транзакционно проверить наличие товара на складе и если его нет - отдать ошибку. На самом же деле выгоднее просто создать заказ, а потом, при его выполнении, если товара нет, просто оповестить клиента о том, что данного продукта на складе сейчас нет и предложить ему подождать ещё пару дней (возможно даже предложив скидку за неудобство). Чаще подобный подход (compensating action) выгоднее бизнесу и не требует strong consistency, главное лишь атомарно записать заказ, а это скейлится гораздо лучше
Все так
источник

DP

Daniel Podolsky in Go-go!
pragus
И тут возникает вопрос: а точно они там нужны или фуллскан на таком железа будет быстрее? )
при фулскане я точно в процессор упрусь раньше
источник

DP

Daniel Podolsky in Go-go!
Roman Sharkov
дам очень банальный пример:

казалось бы что в интернет магазине при покупке мы должны транзакционно проверить наличие товара на складе и если его нет - отдать ошибку. На самом же деле выгоднее просто создать заказ, а потом, при его выполнении, если товара нет, просто оповестить клиента о том, что данного продукта на складе сейчас нет и предложить ему подождать ещё пару дней (возможно даже предложив скидку за неудобство). Чаще подобный подход (compensating action) выгоднее бизнесу и не требует strong consistency, главное лишь атомарно записать заказ, а это скейлится гораздо лучше
но вот когда ты примешь деньги - ты точно захочешь транзакций, правда?
источник

RS

Roman Sharkov in Go-go!
Daniel Podolsky
но вот когда ты примешь деньги - ты точно захочешь транзакций, правда?
всё что касается денег - всё, разумеется транзакциями.

ещё раз: я не говорю что транзакции не нужны в принципе, я говорю что часто они не настолько необходимы как кажется.
источник

A

Alexey in Go-go!
Подскажите, почему в данном примере выводится 1024?
sum := 1
 for sum < 1000 {
   sum += sum
 }
 fmt.Println(sum)
источник

DP

Daniel Podolsky in Go-go!
а сколько должно?
источник

DP

Daniel Podolsky in Go-go!
эта программа считает степени двойки
источник

A

Alexey in Go-go!
ну в условии меньше 1000 вроде как
источник

DP

Daniel Podolsky in Go-go!
512 еще меньше - цикл продолжается
источник

DP

Daniel Podolsky in Go-go!
1024 уже больше - цикл завершается
источник

RS

Roman Sharkov in Go-go!
Alexey
Подскажите, почему в данном примере выводится 1024?
sum := 1
 for sum < 1000 {
   sum += sum
 }
 fmt.Println(sum)
sum += sum же, не sum++ 🙂
источник

A

Alexey in Go-go!
Все понял, прошел дебагером, спасибо, туплю  это ж не sum++
источник

V

Vitaly in Go-go!
Подскажите, насколько эффективно использовать io.ReadFull при чтении tcpstream'а или лучше читать в буфер всё, что прилетело из сети и потом парсить? Будут грабли с переключением контекста в системном вызове или всё уже закешировано?

Задача - читать бинарный протокол, данные летят в одной tcp сессии, заголовок 16 байт + variable часть, длина которой лежит в заголовке. Читать много, по 50-100k пакетов в секунду (делаю генератор нагрузки), т.е. по 100-200k io.ReadFull'ов в секунду.

Альтернатива - делать read и самому разбираться "что именно получил" разделяя на нужные куски (если получил неполный пакет, то возвращаемся в цикле и продолжаем делать read).
источник

DP

Daniel Podolsky in Go-go!
все уже закешированно
источник

V

Vitaly in Go-go!
Можешь уточнить, что конкретно там смотреть? Я с go познакомился всего пару месяцев назад и с pprof пока так и не разобрался, использовал только чтоб смотреть данные по горутинам и затраченному времени в той или иной функции.
источник