• Вопросы по статьям на хабре и википедии про уровни изоляции транзаций - почему так написано?

    terrier
    @terrier
    У термина "потерянное обновление" есть несколько интерпретаций.
    Простейший случай ( c двумя параллельными апдейтами ), который указан в википедии, и который проходит в статье на хабре под заголовком Интерпретация №1 практически невозможен даже при уровне изоляции READ UNCOMMITED ( см. табличку внизу в вики или под спойлер в статье на хабре ).
    Однако возможны различные сценарии с вычитыванием во временную переменную и т.д., когда потерянное обновление будет даже при READ COMMITED. В вики про это не пишут, на хабре это проходит как Интерпретация №2. От такого READ COMMITED не защищает, надо защищаться самому. Сценариев потери апдейта много, вот еще, пример от оракла
    docs.oracle.com/database/121/CNCPT/consist.htm#CNCPT621
    ( Table 9-2 Conflicting Writes and Lost Updates in a READ COMMITTED Transaction
    )
  • Left join vs Несколько селектов?

    terrier
    @terrier
    Бенчмарк ( правильно приготовленный ) на реальных данных решает вопрос.
    Я не знаю, может быть в yii2 есть какая-то специфика, связанная с обработкой данных именно внутри фреймворка, но если мы говорим только про базу, то тут вопросов быть не может - джойн быстрее.
    Более того, запросы типа
    select something from b where some_field in ( long_list_of_values )
    в плохую погоду приводят к куче проблем типа постоянного линейного просмотра длинного списка в in clause, что, понятно, приводит к катастрофическому перфомансу.
    См., например здесь
    https://dba.stackexchange.com/questions/91247/opti...
  • Есть ли такие направление в физико-математическеских факультетатах?

    terrier
    @terrier
    Не, я к тому, что на некоторых навевает уныние, что выпускники физфаков зачастую бросают науку и уходят в программирование "в погоне за длинным и зеленым". Если бы у нас тут было бы больше физиков, точно бы нашелся кто-нибудь кто разделяет эту точку зрения.
  • Поиск работы. python/go/php?

    terrier
    @terrier
    Ну, скажем так - если вы к тому моменту когда начнете активно искать работу будете готовы писать и на том, и на том это сильно повысит ваши шансы и сэкономит вам кучу нервных клеток.
  • Как правильно разгрузить таблицу статистики для такого проекта?

    terrier
    @terrier
    ничего страшного же не будет даже при 1000 записей в секунду?

    Это, конечно же, зависит от железа. Ну, сейчас, пока не запустили проект самое время провести нагрузочное тестирование и узнать точно. ( И потом нагрузочное тестирование периодически проводить. И в мониторинг смотреть, чтобы быть готовым к повышению нагрузки. )
  • Всегда ли нужно использовать внешние ключи?

    terrier
    @terrier
    То есть, пока база не разрослась и не требует дополнительных вмешательств использовать ключи, а со временем удалить их?

    Точно

    Не сильно ли дорогостоящая операция (удаление внешних ключей) при размере в 20GB?

    Это только удаление из системной таблицы какого-то количества записей. Должно быть быстро. Ну, в любом случае, вы же смотрите на мониторинг, у вас будет время запланировать работы на ненагруженное время.
  • [PostgreSQL] Какой тип данных выбрать?

    terrier
    @terrier
    Скажу больше в 8.3 был enum.
    А по производительности вам нужно конкретно смотреть на вашей ( видимо древней ) версии, что быстрее. Из общих соображений - отказ от ненужных констрейнтов ( aka system-level триггеров ) дело хорошее, а будет ли 2-хбайтовый тип заметно быстрее 4-хбайтового ( enum ) совсем неизвестно. Мой хрустальный шар подсказывает, что в реальном случае будет примерно ничья, но для enum мы бесплатно получаем типобезопасность.

    В любом случаи это строковое поле

    Числовое поле. То, что вам для удобства отображения подставляется строчка - это на свойства хранения не влияет.
  • Как лучше реализовать архивирование данных?

    terrier
    @terrier
    Я так понимаю, вы хотели бы делать pg_restore по запросу в произвольный момент?
    Минусы этого в том, что нужна какая-то отдельная машинерия, для того, чтобы в нужный момент накатить pg_restore ( а если он не сработает? ). Плюс производительность сервера просядет в какой-то неизвестный момент. А ведь дампы получается, что надо как-то упорядоченно хранить и, может быть, версионировать. Решение с постоянно раскатанным архивом на удаленной машине заметно проще. Однако, понятно, что на pg_dump/pg_restore тоже работает и на вашей конкретной задаче может оказаться вполне приемлемо.

    Сжатых таблиц в постгресе нет, можно положить tablespace на некую compressed file system.
  • Стажировки только для молодых и только для студентов?

    terrier
    @terrier
    orni5: Да, конечно, это именно аргументы со стороны работодателя.
    Если мы попробуем "играть за соискателя", то, на мой взгляд пытаться устраиваться джуниором и тем более стажёром - не самая удачная идея. Я бы предложил попробовать проскочить эти стадии и идти на собеседования миддлом. Для этого нужно два пункта 1). Собственно знания на уровне миддла 2). Получить полтора года опыта PHP в резюме.
    Ну, по первому пункту все понятно - читаем ночами не только новичковские, но и продвинутые книжки , пишем более продвинутый код на гитхаб. По второму пункту - поднимает знакомства, спрашиваем, кому из работодателей нужен мультикомбайн SEO+PHP по демпинговой цене. Или какой угодно вариант, позволяющий вписать опыт в PHP в резюме. После этого (через год-полтора) будет уже не ситуация " дяденька хочет стать стажёром" ( красная лампочка), а ситуация "PHP программист с опытом устраивается на работу PHP-программистом" (все нормально). Понятно, что это требует вложений (времени,сил, финансов), но это работает.
  • Стажировки только для молодых и только для студентов?

    terrier
    @terrier
    HellWalk:
    Вы настолько откровенно пытаетесь выставить меня каким-то ущербным

    Нет, это совсем не так, я прошу прощения, если показалось будто бы пытаюсь.

    не обнуляет его предыдущий опыт.

    Полностью согласен.
    не стоит на месте

    Верно.

    Однако, пункты почему бизнес с подозрением относится к джуниорам "за тридцать" остаются в силе. И вам действительно было бы полезнее, если бы я изложил их так как это делают эйчары - то есть некими намеками на то, что "возможно, есть некоторая опасность, что вы нам не подойдете по культурным ценностям"?
  • Стажировки только для молодых и только для студентов?

    terrier
    @terrier
    HellWalk:
    С возрастом вы поймете ...

    Бинго! Именно так и разговаривают великовозрастные джуниоры. Причем со всеми - с теми, кто младше и с теми, кто старше.
  • Стажировки только для молодых и только для студентов?

    terrier
    @terrier
    HellWalk: Это написано не для того, чтобы вам понравилось, извините.
  • Стажировки только для молодых и только для студентов?

    terrier
    @terrier
    orni5: Да.
    Общие соображения: человек, на четвертом десятке меняющий отрасль, видимо, стал жертвой кризиса среднего возраста. Ну и будем честны - смена, например, SEO на PHP ( или наоборот ) не спасет от экзистенциальных страданий из-за уходящей молодости.
    Практические соображения:
    - взрослый человек обременен привычным образом жизни/семьей/кредитами и даже если он согласится на стажерскую зарплату, то доволен он не будет. Унылый работник, ищущий где бы подхалтурить никому не нужен
    - жизненный опыт уже не отнимешь - и жизненный опыт этот в плане карьеры весьма низкого качества, раз человек должен начинать ее сначала. Там могут быть, например, такие классные артефакты народной мудрости как "Курица не птица, баба не человек", "Неси с работы каждый гвоздь, ты здесь хозяин, а не гость", "Работа не волк, в лес не убежит" и тэдэ.
    - с возрастом атрофируются такие важные для стажера функции как "Выслушать и сделать как скажут, даже если не согласен", "Спокойно принять критику, и исправиться, даже если не согласен" и тому подобное

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

    Очевидно, что не 100% людей, которые готовы менять карьерный путь подпадают под эти пункты, но им нужны веские аргументы, чтобы показать, что это не так.

    Ну, это довольно известные вещи, но когда причастный народ это узнает, то это может вызвать шок. А реакция на шок у человека с подобным опытом - это зачастую нытье и обвинения в воздух "ААААА, КАЗЗЗЛЫ, ВОТ ИЗ-ЗА ВАС У НАС В СТРАНЕ НОРМАЛЬНЫЙ ЧЕЛОВЕК НЕ МОЖЕТ НАЙТИ РАБОТУ, ВОТ В США Я БЫ ДАВНО У ВАС СТОТЫЩМИЛЛИОНОВ БЫ ОТСУДИЛ". Если у кого-то из читающих это появился сходный позыв - воздержитесь, пожалуйста.
  • Как найти вакансию в геймдеве без опыта работы?

    terrier
    @terrier
    Airat1995: Ты, обращайся если что! Проблема "практически нету вакансий для игростроя" наконец-то снята, но разбаниться в гугле тебе все-таки надо - без этого и в геймдеве будет тяжело.
  • Споры с менеджером?

    terrier
    @terrier
    Если он совсем-совсем не понимает, то во-первых ваш эстимейт он оспорить не может никак ( вариант "нужно быстрее, потому я хочу быстрее" не считается), во-вторых с ним нужно разговаривать на его языке. Даже бабушка поймет. что для того, чтобы, например, сделать форму регистрации на сайте, нужно сначала сделать поле ввода логина, потом кнопку "зарегистрироваться" ... а вот конкретно тому, что на "работу с базой" уйдет два дня придется поверить на слово.
  • Почему Postgres постепенно все сильнее нагружает процессор при постоянной нагрузке?

    terrier
    @terrier
    Я бы с более общего случая начал - определить, что тормозит именно обработка запросов на бэкэндах (т.е. видимо совместный доступ к таблице), а не чекпоинты/автовакуум/что-то еще
  • Можно сделать UPDATE (SQL) с выводом, какие строки не найдены?

    terrier
    @terrier
    Нет, ну можете, конечно сохранить в csv и дальше подцепить через file_fdw, но создать таблицу значительно проще
  • Можно ли использовать WHERE при JOIN?

    terrier
    @terrier
    Дмитрий, вы действительно путаете inner join , который происходит если есть условие where ( как у топикстартера ) и cross join , который происходит если такого условия нет. В первом случае, конечно же никакой "временной таблицы размером count(table1)*count(table2)" не строится точно. ( а во втором - не строится скорее всего )
  • Как использовать в Postgre SQL 8.4 переменные в запросе?

    terrier
    @terrier
    Если хочется, чтобы в подготовленные запросы можно было вставлять имена таблиц или столбцов - склеивайте эти запросы в строку и на строку делайте execute https://www.postgresql.org/docs/8.2/static/plpgsql...