• Почему MySQL делает несколько тысяч отдельных операций случайного доступа к диску?

    terrier
    @terrier
    Full scan можно представить себе так:
    Мы просматриваем все строки таблицы в том порядке, как они лежат на диске и для каждой строки проверяем условие is_active = 1. Последовательный доступ к диску ( или к памяти, в данном случае не важно ) - это хорошо и быстро.

    Доступ с использованием индекса можно представлять себе так:
    У нас есть индекс, то есть некоторая дополнительная структура данных, в которой хранится значение проиндексированной колонки и ссылка на саму строку в таблице. В случае сканирования с использованием индекса мы просматриваем строки в том порядке, в котором они лежат в индексе ( то есть с точки зрения доступа к диску - в случайном ). Случайный доступ к диску - это плохо и медленно, мкей?
    ( это упрощение, но оно нам поможет разобраться )
    Вот про это нам и пытался рассказать автор отрывка. К сожалению, формулировка у него неудачная, так как если данное значение индекса возвращает несколько тысяч строк, а таблица большая ( миллионы, например ), то вполне возможно оптимизатор выберет как раз просмотр по индексу, так как выгода от просмотра меньшего числа записей "перевесит" выгоду от последовательного сканирования. Это все зависит от настроек оптимизатора.
    Ответ написан
    1 комментарий
  • Кого можно почитать в Twitter веб-разработчику?

    terrier
    @terrier
    Этот аккаунт содержит все. что вам нужно знать о современной веб-разработке.
    Ответ написан
    Комментировать
  • [PostgreSQL] Какой тип данных выбрать?

    terrier
    @terrier
    Какой-то у вас не такой enum. enum здового человека такой:
    CREATE TYPE entity_enum_type as ENUM ('post', 'image', 'video');

    Ну и соответсвенно в таблице enum_type будет типа entity_enum_type .
    https://www.postgresql.org/docs/9.6/static/datatyp...
    Вот такой enum занимает на диске 4 байта на значение, нагляден и весьма эффективен.
    Ответ написан
    6 комментариев
  • Си: Почему не выходит ошибка Segmentation fault при выполнении этого кода?

    terrier
    @terrier
    Обращение по адресу памяти, который не был выделен - это Undefined behaviour. Частным случаем такого поведения является Segmentation Fault или вывод значения 1 или все что угодно другое. Вы не можете ожидать какого-то определенного поведения от всей програмы, если в ней есть undefined behaviour.
    Ответ написан
    1 комментарий
  • Как правильно сделать выборку?

    terrier
    @terrier
    Вот так вот более читаемо

    CREATE FUNCTION is_tags_equal(article1 text, article2 text)
    RETURNS boolean AS
    $$
    SELECT NOT EXISTS 
    	(
    		(SELECT tag FROM articles_tags WHERE article = article1 
    			EXCEPT 
    		SELECT tag FROM articles_tags WHERE article = article2)
    		UNION ALL
    		(SELECT tag FROM articles_tags WHERE article = article2 
    			EXCEPT 
    		SELECT tag FROM articles_tags WHERE article = article1)
    	)
    $$
    LANGUAGE sql;
    
    SELECT article FROM articles WHERE is_tags_equal(article, 'ArticleName') AND article != 'ArticleName';
    Ответ написан
    Комментировать
  • Как лучше реализовать архивирование данных?

    terrier
    @terrier
    Ну, да это будет работать, но сам по себе способ весьма брутальный. Более гибко было бы переносить архивные таблицы на удаленный сервер и если нужен доступ к архиву или восстановление из архива обращаться к нему через что-нибудь типа pl/proxy
    Ответ написан
  • Почему Postgresql такой медленный?

    terrier
    @terrier

    Recheck Cond: (user_id = 114)
    Rows Removed by Index Recheck: 153189
    Heap Blocks: exact=39222 lossy=26507


    У вас делается повторная проверка этого самого условия и она действительно отфильтровывает значительное количество строк. Long story short - вам не хватает work_mem, повысьте.
    Ответ написан
    Комментировать
  • Стажировки только для молодых и только для студентов?

    terrier
    @terrier
    Смотрите, тут есть несколько моментов:
    - У некоторых компаний ( скорее больших и забюрократизированных ) может быть верхняя планка по возрасту на джуниора ( и она будет где-нибудь 25, даже если явно не задекларировано ) - тут шансов нет, вас отфильтруют по формальным признакам
    - И в целом компании предпочитают на джуниор-вакансии более молодых ( as the name suggests ). Дяденьки с кризисом среднего возраста, которые хотят в тридцатник занять студенческие вакансии заслужили недобрую славу. Особенно их недолюбливают собственно HR. Однако, естественно, существуют компании, которые готовы "войти в положение" и "дать второй шанс". Как их найти? Очевидно перебором.
    - И тут мы переходим к следующему моменту - вы в порыве самолюбования и кокетства пишете, что у вас "есть ... дурацкая привычка, если что-то делаю - делать хорошо" . Не обманывайте себя - если вы тратите кучу времени на каждое письмо, а потом еще и демотивируетесь при неуспехе - это означает, что вы делаете плохо. Подготовьте один на все компании шаблон, в котором внятно объясните, почему взрослый дяденька хочет пойти на малышовскую вакансию и чем вы будете для компании ценнее, чем толковый студент. И к нему дописывайте кусочек специально для компании: хочу именно к вам, потому что ... нравится отрасль/брэнд/предыдущие проекты и тэдэ
    Ответ написан
  • Адекватно ли использовать Pandas вместо SQL?

    terrier
    @terrier
    Если данные умещаются в память, то это вполне логично. И даже если не умещаются, то можно.
    Ответ написан
    Комментировать
  • Споры с менеджером?

    terrier
    @terrier
    опыта у меня достаточно что бы прикинуть реалистичное время которое в 90 процентах совпадает с рельностью

    Если это действительно так, то вы чудо и сокровище для подавляющего большинства it-компаний.

    Дальше начинается : че так много?

    Нууу, разумный вопрос. И что вы на него отвечаете? Потому что, если отвечаете "#опой чую", то очевидно тут ваше слово против слова менеджера и побеждает тот, кто увереннее стоит на своем ( по контексту вопроса понятно, что это не вы).
    По идее должно быть примерно так:
    Вы: оценка на задачу T - X дней.
    Менеджер: а чо так много-то?
    В: Сначала мне нужно сделать подзадачу t1, это по опыту займет x1 дней, потом нужно дождаться пока Вася сделает такую-то свою задачу, по опыту меньше чем за x2 он не справится. Ну а потом еще добавить подзадачу t3 ... давай-ка посмотрим за сколько делается такая задача .. а, вот - за x3. Плюс риски, общим счетом получается X, как я тебе и сказал ( не забудь, что я попадаю с оценкой в 90: случаев )
    М: не ну долго как-то, можно же быстрее, наверное ...
    В: мы же разобрали из чего получается такая оценка. Что тебе непонятно?
    <уточняем все что непонятно>
    М: не ну ... слушай ... все-таки долго ... на меня давят, нужно 0.8 * X по времени.
    В: окей, не проблема. Что если ты попросишь Васю со своей задачей начать пораньше? Или может не будем делать t3? Или еще как-нибудь подумаем, как нам изменить размер задачи. и уменьшить сроки.

    Итого - менеджер, конечно, должен поинтересоваться, можно ли сделать "дешевле", то есть быстрее, но если ваша оценка обоснована, то просто так поменяться она не может.

    На митингах когда делятся таски между девелоперами тоже звучат эстимейты с потолка.

    Это их проблемы. Я так понимаю, вы их линейный коллега - ну значит воздействовать вы на них можете только просвещением, да и то, только заработав всеми признанный авторитет. То есть "Слушай Вася, как ты знаешь, я даю правильные оценки в 90% случаев, а ты, как известно, в 90% случаев ошибаешься. Так что позволь дать тебе добрый совет ..."
    Ответ написан
    2 комментария
  • Почему Postgres постепенно все сильнее нагружает процессор при постоянной нагрузке?

    terrier
    @terrier
    Посмотрите в pg_stat_activity - никто на локах не зависает? Запросы по часу не исполняются? Соединений получается точно пять?
    Ответ написан
  • Какое направление лучше?

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

    terrier
    @terrier
    Можно ли попытаться выторговать или уговорить у работодателя получить зарплату минимум Джависта


    "Можно" - это означает не запрещено ли это неписаным кодексом фирмварщиков? Или не будут ли вас бить палкой, если вы об этом спросите? Не запрещено, не будут.

    Вы вполне можете на переговорах о вакансии сказать - "Вакансия нравится, однако по зарплате хотелось бы столько-то". Однако, конечно, будьте готовы привести аргументы в пользу своей позиции, причем аргумент типа "а вот у вас рядом вакансия на другие деньги" не годится, ценности справедливости, равенства и братства - это не то, о чем в первую очередь заботится бизнес
    Ответ написан
    Комментировать
  • Можно сделать UPDATE (SQL) с выводом, какие строки не найдены?

    terrier
    @terrier
    Ну, собственно загрузить полный список имен в таблицу ( пусть from_excel ) и вперед

    with updated as
    ( update table_name surname='surname' WHERE name='name'  returning name )
    select name from from_excel where name not in ( select name from updated );
    Ответ написан
    2 комментария
  • Можно ли использовать WHERE при JOIN?

    terrier
    @terrier
    Обе эти ( эквивалентные ) формы перечислены в стандарте, а процесс выпиливания из стандарта SQL таких базовых вещей занимает десятилетия. Так что на нашем веку ничего ни откуда не удалят, пишите так как считаете более читаемо.
    В целом основные точки зрения на этот вопрос такие:
    - Всегда писать JOIN и никаких гвоздей
    - Две-три таблицы писать через запятую, для остального - JOIN понятнее
    Ответ написан
    Комментировать
  • Как в postgresql создать функцию с неизветным количеством аргументов и неизвестными типами?

    terrier
    @terrier
    неизвестными типами


    anyelement

    неизветным количеством аргументов


    variadic

    А вообще чего бы вам jsonb/hstore-объект не передавать в качестве аргумента?
    Ответ написан
  • Какие сейчас есть стандарты в сфере разработки игр? Что надо знать? Какие стеки технологий?

    terrier
    @terrier
    нет ощущения бешенного драйва от этого, круто что делаешь крутые вещи, но нет ощущения, что они чем-либо ценны.


    АХАХАХАХА. Ээээ ... то есть мяу! Вот чего-чего, а ежедневного бешенного драйва и постоянного ощущения ценности в геймдеве как правило нет, особенно если работаешь на конторы типа юбисофта. Ну, ладно, окей, иногда бывает, к тому же если сравнивать с энтерпрайзом ...

    Что нужно среднестатистическому работодателю отечественного геймдева можно прикинуть например здесь ( остальной форум читать противопоказано, могут случиться страшные дегенеративные повреждения мозга ). Как несложно заметить самое модное слово в этом сезоне - это Unity. Можно попробовать вписаться и с джавой - например Skyforge от мэйл.ру писали/пишут на ней. Но, как вы понимаете, из энтерпрайза в мэйл.ру это как-то из огня да в полымя.
    Ответ написан
    Комментировать
  • Стоит ли читать книгу "Код" Чарльза Петцольда (для общего понимания работы ЭВМ)?

    terrier
    @terrier
    "Код" действительно скорее история вычислительной техники для гуманитариев.
    Более техническое например вот
    www.nand2tetris.org - известные и хорошие курс и книга, проводящие от базовых элементов цифровой схемы через машинный язык и ассемблер к собственно "современному компьютеру" и софту для него.
    Ответ написан
    Комментировать