Stas
А что за ОККО?
стрим платформа
Ayrat
и вот мне оттуда надо было доставать кусок жсона и класть в бд и на все это уходило 200мб оперативы
Ayrat
стек обычный - Kafka, Flink, Jackson, Cassandra Datastax Driver
Ayrat
короче, с трафиком 2 сообщения в секунду нечему течь. это 2мб жсона в секунду -_-
🇺🇦 Дмитрий
Ayrat
это жаба стек 🧐
неплохой стек, посмотри на него
Ilya
неплохой стек, посмотри на него
я к тому, что у тебя там нативный клиент
🇺🇦 Дмитрий
приходится перед вставкой смотреть "а нет ли там такого"
🇺🇦 Дмитрий
я соврал, секунды 1.5-2
Ayrat
if not exists
Ayrat
или как оно там в t-sql
Ilya
это же С#!
🇺🇦 Дмитрий
он самый
Ilya
с EF Core!
Ayrat
а сколько тут запросов вообще делается? выглядит как пиздец.
Ilya
ты ходишь по охуенно тонкому льду в этом чате
Doge
приходится перед вставкой смотреть "а нет ли там такого"
А почему бы не сделать тупой ход: во временную таблицу какой-нибудь быстрой балк вставкой тупо всё пришедшее, потом мердж целиком SQL'ом на стороне бд?
Vasily
С точки зрения бизнес логики код выглядит как говно, конечно
🇺🇦 Дмитрий
select и insert
Ayrat
2 запроса
ты профайлером смотрел или так думаешь?
Vasily
Особенно Contains по массиву
🇺🇦 Дмитрий
ну select я профайлил
Vasily
Это прямо топ перформанс
Vasily
Будет
🇺🇦 Дмитрий
норм перфоманс щас, просто память растет)
Vasily
Там сразу квадратичная сложность
Vasily
Начиная с соточки элементов
Ayrat
норм перфоманс щас, просто память растет)
не, 2 секунды на два запроса это не норм перформанс
Vasily
var newIds - там собака порылась
Ayrat
var newIds - там собака порылась
он говорит профайлером смотрел
Ayrat
но я ему не верю!!!1
Vasily
Классическая говнина
Vasily
Поиск элемента по массиву
Vasily
Когда нужно по хэшсету
Ayrat
а EF суммет это оттранслировать в where x in (1,2,3)?
Ayrat
и вообще там индекс есть на этой колонке -_-
Ayrat
обожаю ЕФ
Ayrat
настолько охуенная абстракция что проще сразу SQL написать
Ayrat
(и ведь проще было бы SQL написать)
Ilya
а писал бы на F# и не страдал бы!
🇺🇦 Дмитрий
where x = ANY(...)
🇺🇦 Дмитрий
это синтакс постгри
Ayrat
where x = ANY(...)
а план запроса смотрел,
🇺🇦 Дмитрий
и её оператор
Ayrat
это ненормально тратить 2 секунды на 2 запроса
🇺🇦 Дмитрий
селект отрабатывает на 50 мс
Крылатый
Ayrat
Всегда так делаю.
вот я тоже с давних пор
Ayrat
селект отрабатывает на 50 мс
а ты инсерт профайлером смотрел?
🇺🇦 Дмитрий
нет
Ayrat
и он отрабатывает за 1.950 секунды?
Vasily
селект отрабатывает на 50 мс
А формируется сколько?
Ayrat
и ты в него не смотрел?
Ayrat
а, там же много инсертов
Ayrat
там наверное ПОСЛЕДОВАТЕЛЬНЫЕ инсерты по массиву
Ayrat
йопта
Ayrat
короче, выкидывай еф, пиши нормально
🇺🇦 Дмитрий
и он отрабатывает за 1.950 секунды?
старая реализация работала секунд 50 потому я выиграл
Vasily
Ну там вообще донельзя хуевый код
🇺🇦 Дмитрий
то-есть лучше sql с if not exist написать?
Ayrat
старая реализация работала секунд 50 потому я выиграл
НЕ НУ КОНЕЧНО ТЫ ВЫИГРАЛ но у вас там 2 РПС
Ayrat
было 0.0001 РПС а стало 2
Vasily
Можно bulk insert написать
Vasily
И выиграть дохуя
Doge
там наверное ПОСЛЕДОВАТЕЛЬНЫЕ инсерты по массиву
Я говорю, надо постгресовским COPY ... FROM STDIN (FORMAT BINARY) во временную таблицу, а потом уже смерджить временную таблицу и целевую целиком внутри постгреса
Ayrat
но еф скорее всего обосрется
Ayrat
и придется писать плскл
Vasily
И тут возникает вопрос - а нахуя там кафка
Vasily
Если там все так медленно еще до нее?
🇺🇦 Дмитрий
у нас есть бизнес логгер
Ayrat
кафка тут не при делах вообще
🇺🇦 Дмитрий
он срет в кафку