Vladislav
Продуктивно
Ayrat
Ты пробовал ребейз делать когда у тебя не один коммит?
Отож, я ребейзил две сотни как-то. И понял что я мудак
Ayrat
Потому что можно было сделать 1 мерж
Vladislav
С мержем ты хоть конфликты на последнем решаешь, с ребейзом этот ад начинается на всем дереве
Ayrat
Или надо было настроить CI
Vladislav
СИ научился конфликты решать?
Ayrat
СИ научился конфликты решать?
Он тебе в ветку насильно впихивает мастер/дев если ты вафлишь
Ayrat
Конфликты на тебе
Ayrat
Но делать это надо непрерывно
Диёр
у меня если что-то нужно сделать я сначала чекаут на нужный комит делаю, потом в новой ветке играюсь и потом мёржу
Ayrat
А не раз в две недели
Vladislav
Он тебе в ветку насильно впихивает мастер/дев если ты вафлишь
Так проблема не в том что я не вижу нового мастера, а в том что изменения в мастер 60% времени ломающие и ребейз превращается в 11 круг ада. И либо переходишь на мержи либо сливаешь все дерево в один коммит что кек, перед ребейзом
Vladislav
Я про это
Ayrat
В идеале короткоживущие ветки из одного - двух коммитов. Крупные фичи внедрять эволюционно, а не революционно
Ayrat
не всегда так можно
Надо стремиться
Vladislav
Сам знаешь
Vladislav
Бывают ЛОМАЮЩИЕ изменения, бывают нет
Ayrat
Так у нас проект то новый, тут это неизбежно
Не соглашуська. Ну да ладно. В общем CI это важно, ребейз на мастер каждый день должен стать нормой. Если там все ломается уже сегодня, не стоит откладывать это на завтра, лучше не станет
Bonart
Я ненавижу мерж комиты
Хороший мержкоммит - пустой мержкоммит после пулл-реквеста в мастер.
Ayrat
Хороший мержкоммит - пустой мержкоммит после пулл-реквеста в мастер.
Таки да. Это единственный мерж коммит который я терплю
Bonart
Непустые мержи - это пиздец. У тебя сбои и косяки, начинаешь исследовать - косяк добавлен в мерж-коммите. И хер теперь знает, зачем то изменение в мерже было нужно
Bonart
Так у нас проект то новый, тут это неизбежно
Сразу установить четкие правила, могу шаблон прислать
Anatoly
но у меня был один случай, когда между первым коммитом и мёржем было 8 месяцев
Anatoly
и девелоперы были не при чём
Anatoly
ребейз каждый день - ад, я делал раз в неделю
Bonart
ребейз каждый день - ад, я делал раз в неделю
При атомарных коммитах даже серой не припахивает
Anatoly
При атомарных коммитах даже серой не припахивает
коммит атомарен по определению. но у нас в процессе этих 8 месяцев ещё репу попилили пополам (отпилили FE от BE)
Ayrat
Всегда есть исключения. Но я уверен что 99% проектов вполне могут работать на непрерывной интеграции, а аргументы против это обычно лень
Bonart
коммит атомарен по определению. но у нас в процессе этих 8 месяцев ещё репу попилили пополам (отпилили FE от BE)
От коммиттера зависит. Нальют в один коммит рефакторингов, форматирования, переименования, изменения функциональности и соси бензин
Ayrat
Между "Настроить CI" и "поднять ТимСити" лежит целая пропасть в виде раздачи пиздюлей, настройки бизнес процессов и пр
Ayrat
Поднять ТимСити может каждый.....
Bonart
Поднять ТимСити может каждый.....
Я заставил девопса асап сделать пайплайн, который обязан был успешно проходить до мержа
Ayrat
Гаспада, ожидается проектик где надо будет тянуть кучу всяких похожих сучностей из разных API, причесывать их, а потом по ним делать поиск/фильтрацию и etc. Вдруг кто, уже набитыми шишками, поделится?
У нас вот именно таких задач очень много. Щас опишу как она решена в одном проекте Есть сервис, который должен предоставлять ВСЕ данные какие возможно. Он потребляет все возможные кафки (а если инфа доступна только через апи, делают сервис, который поллит данные из апи и кладет в кафку) и складывает в единую сущность с примерно такой моделью: ids: { id1: optional id1 id2: optional id2 id3: optional id3 … }, datasource1: optional datasource1, datasource2: optional datasource2, … все датасорсы имеют свои айдишники, их надо как-то коррелировать, там могут быть разные отношения 1:1, 1:N, N:M это зависит Если там 1:M например, то внутри ids будет массив других айдишников. Как это наложить на твою БД и её индексы, зависит от БД. У нас в кассандре много таблиц маппинга, но какие-то бд умеют строить индексы по структуре Далее основной пейлоад имеет поля в которые тупо перезаписывается (или мержится) пришедшая инфа из datasource. Соответственно может вообще нихуя не придти, поэтому все поля опциональные. У всех должен быть таймштапм послднего ingestion У тебя может встать вопрос - а что если нужны поля, которые агрегируют несколько датасорсов? Тогда тебе нужно организовать change feed. Допустим в агрегации участвуют поля datasource1 и datasource2. Когда кто-то из них изменяется посылается событие в топик и отдельные сервис будет пересчитывать aggregatedField и перезаписывать его при получении новых данных. По итогу на каждое изменение полей (значимое) должно генериться событие в аутпут топик и консумеры должны получать инкременты изменений. АПИ поверх этого должно учитывать что пейлоад ебанистичеки большой и консумер может хотеть получать только его часть поэтому можно в квери писать имена полей из финального респонса, которые ты хочешь получить (соответственно из БД только их и грузить). Ты скажешь - ну это же графкуэль - я отвечу - ПОХОЖЕ, но моё мнение что графкуэль говна самовар.
Диёр
У нас вот именно таких задач очень много. Щас опишу как она решена в одном проекте Есть сервис, который должен предоставлять ВСЕ данные какие возможно. Он потребляет все возможные кафки (а если инфа доступна только через апи, делают сервис, который поллит данные из апи и кладет в кафку) и складывает в единую сущность с примерно такой моделью: ids: { id1: optional id1 id2: optional id2 id3: optional id3 … }, datasource1: optional datasource1, datasource2: optional datasource2, … все датасорсы имеют свои айдишники, их надо как-то коррелировать, там могут быть разные отношения 1:1, 1:N, N:M это зависит Если там 1:M например, то внутри ids будет массив других айдишников. Как это наложить на твою БД и её индексы, зависит от БД. У нас в кассандре много таблиц маппинга, но какие-то бд умеют строить индексы по структуре Далее основной пейлоад имеет поля в которые тупо перезаписывается (или мержится) пришедшая инфа из datasource. Соответственно может вообще нихуя не придти, поэтому все поля опциональные. У всех должен быть таймштапм послднего ingestion У тебя может встать вопрос - а что если нужны поля, которые агрегируют несколько датасорсов? Тогда тебе нужно организовать change feed. Допустим в агрегации участвуют поля datasource1 и datasource2. Когда кто-то из них изменяется посылается событие в топик и отдельные сервис будет пересчитывать aggregatedField и перезаписывать его при получении новых данных. По итогу на каждое изменение полей (значимое) должно генериться событие в аутпут топик и консумеры должны получать инкременты изменений. АПИ поверх этого должно учитывать что пейлоад ебанистичеки большой и консумер может хотеть получать только его часть поэтому можно в квери писать имена полей из финального респонса, которые ты хочешь получить (соответственно из БД только их и грузить). Ты скажешь - ну это же графкуэль - я отвечу - ПОХОЖЕ, но моё мнение что графкуэль говна самовар.
почему тебе графкуль не нравится
Ayrat
Возможность писать квери на клиенте, это что-то очень странное и попахивать excel, когда надо дать возможность играться с данными доверенным людям
Ayrat
открывать подобное апи народу опасно. Я бы открыл возможность читать датасеты и играться по ним тем чем клиенту удобно, или пусть сразу ходят в хайв и через ебучий спарк делают запросы
Диёр
так а в чём опасность? пришёл тебе запрос, ты валидируешь, потом уже исполняешь
Ayrat
А саму задумку - писать запросы на клиенте чтобы меньше данных тянуть, не только через графкл можно сделать
Ayrat
и вперде исполнять
Диёр
нет, это не так работает
Диёр
ты перед исполнением запроса чекаешь его сложность
Диёр
по каждому полю и с учётом каждого аргумента комплексити чекаешь и потом уже допускаешь или нет
Mark
так а в чём опасность? пришёл тебе запрос, ты валидируешь, потом уже исполняешь
Классический SQL тоже так проектировали. Потом оказалось, что некоторые запросы могут поставить базу в известную позицию. При этом не только сами будут выполняться медленно, так ещё и притормозят все остальные.
Ayrat
Моё мнение, что подобное апи выставлять наружу нельзя, а для внутренних клиентов подобный запрос может исходить только от аналитиков, которым можно дать доступ к данным без граф кл. Все остальные кейсы надо проработать и понять что же им блять НА САМОМ ДЕЛЕ НУЖНО
Диёр
если таки видно что запрос тяжёлый, то зачем его пускать дальше
Anatoly
graphql отличный, я бы во всех FE использовал
Anatoly
в новом есть косты запросов, прямо на запрос или сущность вешаешь кост
Диёр
в новом есть косты запросов, прямо на запрос или сущность вешаешь кост
в новом что? это же не графкуля фича, а каждой отдельной реализации
Диёр
но комплексити запроса был ещё с бородатых времён
Диёр
а ещё если у фронта скорость разработки сильно больше так удобнее
Диёр
а то приходят и вечно "а сделай мне урл под эту хрень ну позязя"
Mark
но в графкуле ты сам играешь в валидатора и сам играешь в планировщика
Ну в SQL также и получилось. Идея была в том, что пользователи смогут сами запрашивать сервер. Оказалось, чтобы опрашивать, надо быть по хорошему спецом. Теперь даже специальность появилась такая: писать эксплейны к базе и думать, где какие индексы расставить. Даже не всякий бекенд-программист такое умеет.
Диёр
в 2017м чот не было
ну от реализации зависит
Mark
если таки видно что запрос тяжёлый, то зачем его пускать дальше
Я не уверен, что можно понять для любого наперёд заданного запроса, что он тяжёлый. Похожая задача останова алгоритмически неразрешима. Ну и некоторые запросы при том, что они тяжёлые, могут быть вполне корректными с точки зрения бизнеса.
Anatoly
достаточно повесить везде 1, поставить лимит в 100 для начала
Dmitry
но ты то заранее знаешь откуда и что будешь запрашивать и насколько это больно будет
не попробуешь - не узнаешь на мой взгляд а прогонять тяжелый запрос для того, чтобы узнать, что он тяжелый - такое
Mark
но ты то заранее знаешь откуда и что будешь запрашивать и насколько это больно будет
Ну это значит, что все пользователи должны быть профессионалами в построении быстрых запросов. Что для SQL оказалось не так.
Anatoly
СУБД пытается выполнить запрос всегда
Anatoly
а graphql сервер на сложный говорит "пошёл лесом"