• VDS не выдерживает нагрузки. Что делать?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Что делать?

    Сменить обслуживающего администратора/программиста.
    Ответ написан
    Комментировать
  • Нормализация БД. Зло или добро?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Все зависит от контекста высказывания (задачи разные бывают). Бросаться в крайности это глупо (только ситхи все возводят в абсолют (с) Оби)

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

    p.s. уточните о чем был проект или скиньте ссылку, любопытно посмотреть на безумца или понять его хотя бы.
    Ответ написан
    Комментировать
  • Почему не все серверы пишутся на Node js?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    1. Принципиальных качественных преимуществ у node.js перед остальными языками нет, как впрочем и недостатков. Просто yet another язык со своими особенностями. Соответственно если в вопросе заменить node.js на php/ruby/python итд - ничего не изменится.
    Вопрос по сути абстрактный "почему все не перешли на язык %%%%%"

    2. Ответ на абстрактный вопрос:
    а) Потому что существует огромное количество legacy кода который нужно поддерживать. Работы по поддержке и развитию существующего кода на порядок больше чем написания с нуля нового
    б) Потому что у разработчиков есть свой стек любимых технологий, изменять который без явных экономических причин основная масса не готова
    в) Потому что умные технические менеджеры выбирают стек технологий проекта исходя из имеющихся под рукой разработчиков и легкости поиска и заменимости оных.

    UPD
    hbrmdc
    У NodeJS есть уникальные и очень весомые преимущества, которых нет ни у одного другого языка. Например то, что это JS, и, следовательно, нет необходимости разучивать лишние языки - можно весь webapp писать на js.
    Личные предпочтения обоснованные привычками - это не имеющий значения аргумент в данном вопросе.

    1) Есть отличия, да. Только не те о которых Вы пишите. То что это "JS" вообще ни на что не влияет.
    JS хорошо знают фронтендщики - а кто пустит фронтэндщика к внутренней архитектуре? Там подход совершенно другой нужен, другие навыки, другое понимание как это все работает. Просто пересадить человека с фронта на бек - нельзя.

    На самом деле основные отличия другие:
    Постоянно живущий процесс, фактическая однопоточность. В зависимости от задачи - это может быть и плюсом и минусом. Условно для какого нибудь сокет-сервера - плюс (активно используем на живых проектах). Для middleware - я бы подумал. Для нагруженного сервиса с расчетами - точно нет.

    2) Личные предпочтения обоснованные привычками это основной аргумент.
    Я вот умею в php, умею в ноду, умею в еще десяток умных слов.
    Мне нужна новая команда на новый проект.
    Я открываю hh и что я вижу: node.js 279 резюме из которых половина фронтэндщики.
    PHP - 9613 резюме. Даже если 90% разработчиков PHP на hh - уроды которых к коду нельзя подпускать на пушечный выстрел - останется все равно в 3 раза больше чем есть node.js.
    Собственно на этом выбор и закончен.

    На малопопулярных языках пишут в случаях:
    a) это мелкий сервис с неявными перспективами который можно переписать за неделю
    б) это проект "для души" разработчика.

    Получается замкнутый круг на самом деле.
    Менеджер смотрит резюме, резюме на node.js нет =>
    Менеджер не начнет проект на node.js =>
    Не возникнет вакансия на node.js =>
    Разработчик анализируя вакансии не увидит вакансий на node.js =>
    Разработчик будет учить что то другое =>
    Менеджер смотрит резюме, резюме на node.js нет...

    Переломить ситуацию могут только очень крупные игроки обладающие возможностями формирования рынка (например Apple и Swift), и то не со 100% гарантией (samsung&c и Tizen)
    Ответ написан
    13 комментариев
  • Почему не все серверы пишутся на Node js?

    mannaro
    @mannaro
    Умею профессионально гуглить
    Есть Ассемблер.
    Но если он есть, на нем все возможно, и в добавок он соображает быстрее того же C++, то почему еще существуют другие решения в мире софтовой разработки?

    Традиции, привычки и необходимость поддерживать существующие проекты не в счет. Мне интересно, почему новые проекты пишутся не всегда на ассемблере?
    Ответ написан
    14 комментариев
  • Как вытащить две или больше случайных записей из бд?

    In4in
    @In4in
    °•× JavaScript Developer ^_^ ו°
    Раз, Два, Три ... Пятьсот...

    Вы в гугл заходили?
    Ответ написан
    Комментировать
  • Как понять, почему mysql ест очень много CPU?

    nazarpc
    @nazarpc
    Open Source enthusiast
    Тут не в настройках, а в коде запросов скорее всего проблема. Профилировать нужно и смотреть что к чему.
    Можно взять Blackfire как достаточно продвинутый.
    Ответ написан
  • Книга по php для не новичка?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    Немножко дополню Назара:

    > но так и не научившегося писать чистый и красивый код

    Р. Мартин - Чистый код. Создание, анализ и рефакторинг

    > применять такие крутые штуки как namespaces, MVC, ООП, Singleton и пр.

    Мэтт Зандстра - PHP. Объекты, шаблоны и методики программирования
    Э. Фримен, Э. Фримен, К. Сьерра, Б. Бейтс - Паттерны проектирования
    Ответ написан
    3 комментария
  • Как быстро добавить уникальный индекс в InnoDB если уже в таблице много не уникальных данных?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    CREATE TABLE `temp` LIKE `old_table`
    ALTER TABLE `temp` ADD UNIQUE ...
    INSERT INTO `temp` ... SELECT FROM `old_table` ... ON DUPLICATE KEY ...
    DROP TABLE `old_table`
    ALTER TABLE `temp` RENAME TO `old_table`
    Ответ написан
    2 комментария
  • Можно ли делать таблицы MYISAM + INNODB?

    Melkij
    @Melkij
    PostgreSQL DBA
    1) можно.
    Но если вам всё равно не нужны ваши данные - сделайте memory (не шутка для кеша) или blackhole. Они быстрее работают.
    2) после смены innodb->myisam явно что-нибудь произойдёт с производительностью. Например, всё встанет колом на интенсивной записи из-за соответствующей табличной блокировке.
    Или покрэшится на ровном месте, тоже бывает.

    innoDB - это не внешние ключи, а несколько десятков лет наработанной теории и граблей транзакционных систем, и не просто begin/commit, а как ни в коем случае не потерять ни одной закомиченной транзакции при аварии.
    Ответ написан
    1 комментарий
  • Что не так с моими ответами по sql и как стоило бы ответить?

    sim3x
    @sim3x
    1 stackoverflow.com/questions/1179758/function-vs-st...
    2 stackoverflow.com/questions/3986366/how-to-create-...

    в обоих ответах акцент ты сделал не на том

    Скорее всего на практике ты не сталкивался с тем о чем тебя спрашивали.
    В следующий раз, когда споткнешься об подобный вопрос прямо скажи, что не сталкивался с задачей для которой стоит применять Х.
    Спроси у интервьювера, где они в проекте сейчас используют данную технологию
    Ответ написан
    3 комментария
  • Что читать после learn.javascript.ru?

    mrFrostOff
    @mrFrostOff
    Выше правильно заметили, что нужно больше практиковаться. Так теория не будет лежать сухим грузом, а будет лучше запоминаться ассоциируясь с уже выполненными задачами. Попробуйте совместить книги с несложными задачками из какого-либо онлайн курса, благо их сейчас довольно много. Например Сodecademy или Сodeschool
    Ответ написан
    Комментировать
  • Есть ли в Python и Go делегаты?

    Bahusss
    @Bahusss
    Python Master
    Делегирование - это шаблон проектирования, и реализовать его можно на большинстве современных языков программирования. Пример для Python есть в вики, никаких дополнительных ключевых слов для реализации делегатов в питоне не требуется, т.к. любой метод можно передать в качестве параметра куда угодно. Так же можно помещать методы в структуры данных, вот пример:

    def say_hello(name):
        print 'Hello,', name
    
    def say_goodbye(name):
        print 'Bye,', name
    
    phrases = {
        'hello': say_hello,
        'bye': say_goodbye,
    }
    
    def say(what, name):
        phrases[what](name)
    
    say('hello', 'Ivan')
    say('bye', 'Oleg')


    В Go этот паттерн реализуется тоже очень лаконично.
    Ответ написан
    Комментировать
  • Причина в неправильном синтаксисе?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    У вас намешан php код и html.
    <?php while ($row = mysql_fetch_assoc($result)): ?>
        <h1><?= $row['title'] ?></h1>
        <p><?= $row['text'] ?><p>
        <p>Дата публикации: <?= $row['date'] ?></p><p><?= $row['time'] ?></p>
        <p>Автор: <?= $row['author'] ?>
    <?php endwhile ?>


    я сам знаю то что ошибка в чем
    В золотой фонд.
    Ответ написан
    Комментировать
  • Почему MySQL использует только часть индекса?

    @mr_creo Автор вопроса
    Все очень просто:
    UPDATE `test` USE INDEX (`time`) SET `lock` = 123456 WHERE `lock` = 0 ORDER BY `time` LIMIT 1000

    Затронуто 1000 строк. (Запрос занял 0.0736 сек.)
    Всем спасибо!
    Ответ написан
    Комментировать
  • Почему MySQL использует только часть индекса?

    bigton
    @bigton
    Web-программист
    Но аналогичный запрос UPDATE выполняется недопустимо долго (286.0228 сек.)
    UPDATE `test` SET `lock` = 123456 WHERE `lock` = 0 ORDER BY `time` LIMIT 1000


    Может быть потому что по lock есть индекс и это время получается из-за его перестроения?
    Ответ написан
    Комментировать
  • Статический или не статический метод?

    @djay
    Статика - это глобальное состояние. Статический метод или статическая переменная абсолютно ничем не отличаются от глобальной переменной, потому что, ни статика ни глобальная переменная не были переданны в качестве аргументов нигде и никак, а значит поступают из глобального пространства.

    Чем статика может быть опасна?
    Представь, что ты пишешь утилиту для загрузки изображений. И вот наступил момент, когда нужно указывать параметры обрезки для превьюшек. Со статикой это может выглядеть так:

    public function upload()
    {
         $width = Config::read('width');
         $height = Config::read('height');
         // .. Do upload..
    }

    (На заметку CakePHP кишит такими подходами)
    Проблемы такого подхода?

    1. Нужно знать и быть точно уверенным, что статичный класс Config, был где-то там далеко инициализирован. А вдруг он не был инициализированным?

    2. А что если ты решишь сменить источник конфига? Например читать, это все не из класса `Config` а откуда-нибудь из REST? Придется все переписывать, затем опять тестировать. Эта проблема известна как сильная связка.

    3. Попробуй написать юнит тест для такого, без хаков и изращенных костылей. Ведь для того чтобы протестировать этот метод, нам нужно где-то там в глобальном пространстве инициализировать `Config`, затем убедится что он работает.

    4. Скрытые зависимости.

    Например инициализуруя класс, в случае статики:

    $uploader = new Uploader();
    $uploader->upload(...);


    Ты и твои пользователи не видят какие у класса зависимости и от работы чего вообще он зависит. Проблема заметна особо, когда ты пишешь библиотеку или компонет.

    Но тогда почему такие популярные фреймворки как Yii или Laravel полностью покрыты статикой?

    Для того чтобы понять какие последствия несет статика, попробуй воспользоватся хоть одним компонентом Yii фреймворка отдельно. Например, если тебе нужна только CAPTCHA ты не сможешь её вытащить оттуда не переписав почти весь компонент, потому что везде внутри присутвует глобальное состояние, в виде `Yii::$app->`. То есть чтобы воспользоватся только капчей, придется подключать весь фреймворк и все его внутренние механизмы, когда это абсолютно не нужно.

    Что касается Laravel, то статики там меньше, поскольку некоторые компоненты, вроде Eloquent могут использоватся по отдельности. Статика в ларе, она существует как обёртка, но не как реализация, во многих местах в отличии от Yii.

    И отвечая почему - потому авторов либо их не заботит кристально чистая тестируемость, либо слабая связка, ну или потому что опыта не хватает чтобы писать чистый и поддерживаемый код.

    Вообще посмотри, как задачи решаются в Zend / Symfony
    Там почти везде все зависимости передаются в качестве аргументов, что есть хорошо, слабо связано, и тестируемо.
    Ответ написан
    5 комментариев
  • Как можно в Symfony загрузить файл сразу на облако (Яндекс.диск, Dropbox и т.п.)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    ну файл то всеравно на сервер для этого нужно загрузить. Нет, можно конечно и с клиента но это не секьюрно.

    В целом рекомендую использовать flysystem, там есть адаптер для webdav.
    Ответ написан
    Комментировать
  • Какую ОС выбрать для VPS/VDS?

    Ernillew
    @Ernillew
    Администрирую *nix-системы с 1997 года
    Пусть выбирает ваш системный администратор тот дистрибутив который ему удобней.
    Вам, как ничего не понимающему, должно быть пофигу.
    Ответ написан
    Комментировать
  • Можно ли отдавать root доступ от VPS?

    Denormalization
    @Denormalization
    Если не доверяете програмисту - делайте сайт сами.
    Если у него есть какие-то хитрожопые мысли - он в любом случае сможет навредить.

    Давать рут доступ опредленно нужно, либо сами будете ставить и настраивать весь софт.
    Ответ написан
    Комментировать
  • Как хранить время последней активности пользователя в MySQL?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    Общее для всех mysql:
    Проверить какой запрос отрабатывает система если replace то плохо если update или insert on duplicate key update - то ок.
    Если в action_history есть индексы кроме примари кей то их скорее всего стоит убрать т.к. вероятно запросы ( сортировки или агрегации) по этим полям будут приводить в любом случае к фулскану и индекс не будет иметь смысла, а при апдейте перестройка будет постоянно всё класть.

    Для Maria: убедиться, что в Maria XtraDB не сломана построчная блокировка (всё таки опыт продакшена у марии неё вялый ). Потом вызывает опасение реализация внешнего индекса в таблицах разного типа, возможно это как то может ломать построчную блокировку. Если у вас лок всей таблицы разберитесь откуда, так не должно быть

    В общем и целом, поразмышлять что INSERT DELAYED VALUES (1,2,3),(..,..,..),(N,N,N) для записи всех действий будет работать заметно веселее особенно без индексов и в одном потоке, а после некоторых шаманств с агрегацией по крону ещё не будет деградировать от распухания. Что можно про крону парсить access.log (понимать что он не рилтайм), в этом случае будет одна пачка апдейтов допустим раз в минуту и user_id будет заапдейчен только один раз, это будет пожалуй самой простой реализацией задачи упорядочивания и фильтрации потока апдейтов к mysql. Парсинг лога можно заменить на RabbitMQ, или написать своего демона который будет висеть на соке и рулить.

    Но смотрите если у вас задача в стиле показать последние 10 пользователей сделавших, что то, то это решается сильно иначе.
    Ответ написан
    2 комментария