• Где и как хранить таблицу на 1 миллиард записей?

    @thyratr0n
    • Количество партицированных таблиц в 10к - это мелочи, так что смело разделяйте.
    • Избавьте от id - он тут не нужен.


    Если есть возможность использовать другие СУБД, то тот же Redis, как было сказано, отлично решит вашу проблему.
    Ответ написан
    Комментировать
  • Какой вы используете центральный лог сервер?

    @thyratr0n
    То, что к ELK стенды не подключались, - тут надо смотреть на способы подключения + объемы логов (типа, отправлять логи по несколько сот килов по UPD без специфичных наработок - плохая затея). А вообще, rsyslog локальный + удаленный ELK - решит все ваши задачи.
    Ответ написан
    Комментировать
  • Как вы деплоите angular проекты?

    @thyratr0n
    Ничего скомпиленного в репе не надо держать - только исходники. Компилить - прямо на серверах.
    Ответ написан
    Комментировать
  • Где искать удаленку за бугром?

    @thyratr0n
    1) з/п может превышать 3$/мес, но учитывайте, что это "грязная" з/п, с который вы еще минимум 10% отдадите за налоги/комиссии/итд. А все это дело вам придется платить, ибо "в черную" вы не сможете физически работать (любой банк обяжет вас проходить валютный контроль).
    2) з/п может превышать 3$/мес, если вы найдете достойную работу, и у вас имеются скиллы минимум на senjor-разраба с 6-ти летним серьезным enterprise-опытом.
    3) в 95% случаев все, что вы найдете, будет аналогом фриланса. Именно работа по контракту - это единицы, и только конторы, которые сознательно работаю с сотрудниками из СНГ (например, VirtualHealth).
    4) интервью - это рандом, как повезет.
    5) вы можете найти много контор забугорных, которые охотно с вами при наличии внятного аглицкого и должной квалификации захотят работать, но... при условии релокации (да, с этим без проблем помогут, куда захотите: Бельгия, Нидерланды, Германия, итд).

    Удаленка - до сих пор не особо любимый работодателями формат взаимодействия с сотрудниками, что у нас, в РФ, что за бугром (я именно про fulltime работу).
    Ответ написан
    1 комментарий
  • Как лучше (дешевле) хранить справочники?

    @thyratr0n
    Вижу, народ тут нормализацией увлекся. Поясню: есть 6 форм нормализации, а есть суровая реальность. Точка. И нечего тут в адрес Алексей Черемисин указывать на какие-то нарушения.

    Справочники нужно хранить так, как это возможно. Если данные однотипны:
    1) если данные в них однотипны, можно скидать все в одну таблицу, запилив составной РК (type, key) или по старинке одинарный - это как душе угодно (пока количество записей не более, чем 6-ти значные, разницы не будет);
    2) можно то же самое запилить в разных таблицах - на вкус и цвет, как говорит.
    Если же данные разнотипны, то:
    1) можно в разных таблицах, если по отличающимся полям может идти фильтрация;
    2) можно все в одну таблицу, запилив какое-то "сложное" поле с типом TEXT/BLOB/VARCHAR, куда писать отличающиеся данные.

    Все, никакими тут нормализациями и не пахнет. Всем добра.

    P.S. Дмитрий Ларин вам следует более точно формулировать свои вопросы, ибо "Без ТЗ результат ХЗ" (с)
    Ответ написан
    1 комментарий
  • Не могу понять для чего нужны Entities в ООП PHP, Yii?

    @thyratr0n
    Есть разные подходы к пониманию смысла этих вещей.
    Entities чаще всего используются в контексте DDD-подхода. Там это означает то, что объект может изменять свое состояние (фигура может менять цвет, стакан может заполняться и тд). Супротив Entities выступают т.н. ValueObject, которые используются только для чтения и менять свое состояние не могут.
    И те, и другие используются в бизнес-логике приложения и генерируются либо хранилищами (storage), либо сервисам (в зависимости от выбранного подхода).

    В контексте же Yii понятие Entity не применяется. ибо там структурной единицей бизнес-логики выступают экземпляры ActiveRecord чаще всего (сам фреймворк к этому располагает), либо, иногда, наследники Model.

    Главное - это то, что сущность не обязательна должна сохраняться as is, т.е. иметь четкую проекцию в БД, ибо сущностью может выступать экземпляр паттерна Композит - все зависит от хранилища/сервиса, который это дело будет "CRUD'ить".
    Ответ написан
    2 комментария
  • Как правильно реализовывать модели в MVC структуре сайта?

    @thyratr0n
    Существует множество подходов к решению этой проблемы. Все зависит от того, сколько времени вы готовы потратить на их реализацию, а так же от используемых фреймворков. Если вы говорите про "модель", значит, вы используете паттерны либо ActiveRecord, либо Table.

    1. Если вы используете готовые фреймворки, то юзайте инструментарий "из коробки" - для учебного проекта этого будет достаточно.
    2. Если вы сами пишете, то тут возможны варианты:
    2.1 Можно создавать классы-компоненты (storage), которые будет организовывать выборку и нужным образом компоновать классы между собой:
    2.2 Можно создать в БД вьюхи (view), которые объединят нужные данные, а в коде использовать, как единую сущность.
    2.3 Можно написать постобработку для CRUD-операций (триггеры в БД, events в коде и тд), которая будет собирать все данные в четвертую таблицу, отдельную. Тогда просто один класс доступа будет.

    Варианты во 2-м пункте расположены по возрастанию уровня сложности.

    Если вы сами пишете, то в том, что касается кода, я советую на выходе собирать единый объект (не используйте для композитного объекта понятие сущности - это не корректно). Как вы его будете собирать - зависит от того, что вы выберете из пунктов выше. Но в любом случае итоговый композит должен выглядить подобно:

    class Comment
    {
        /**
         * Я бы еще рекомендовал передавать связанные сущности в конструктор, ибо без них комментарий не имеет смысла
         * @param User
         * @param File | null
         **/
        public function __construct(User $user, File $file = null); //я б
      
        /**
         * тут никаких интерфейсов, ибо интерфейсы, дублирующие сущность - моветон
         * @return User
         **/
        public function getUser(): User 
        
        /**
         * @return File
         **/
        public function getFile(): File
    }

    Либо использовать фабрики. Но фабрики - это уже "на вкус и цвет", как говорится.
    Ответ написан
    Комментировать
  • Как организовать хранение MySQL big data (30млн-50млн) и выборку по date range?

    @thyratr0n
    Обычно такие вещи организуются в разных таблицах, типа: stock_5_min, stock_15_min, stock_1_hour. Как правило, в биржевых клиентах временные периоды всегда одни и те же и неизменны.

    А на счет временных отрезков - переложите это на приложение, а не на БД.
    Ответ написан
    Комментировать
  • Может ли ИП быть нерезидентом (постоянно проживать за границей)?

    @thyratr0n
    Исходя из своего опыта работы на забугор по договорам ИП, могу сказать, что дело в "трудовом" виде договора. Договор должен носить характер предоставления _услуг_. Переделайте договор, предоставьте _сами_ перевод (по уму, так и должно быть), и работайте, как ни в чем не бывало.
    На нерезидентность пофиг, ихмо: у вас есть реквизиты ИП, у вас есть необходимые р/с и тд - никто не будет проверять ваше местоположение (я 5 лет работал на забугор, будучи прописанным в одном месте, и находясь физически в другом - это, конечно, несколько иной момент, но суть та же). Тут проблема лишь в возможных физических визитах в налоговую. Как я понимаю, вы и декларации (если у вас не патент) будете слать удаленно - тут нужно будет продлять цифровую подпись (если вообще нужно).

    Т.е. все сводится к переделке договора.
    Ответ написан
    2 комментария
  • Официальное трудоустройство на удаленке - исключение или правило?

    @thyratr0n
    Да, это совершенно нормальная ситуация. Я 5 лет работал ИП на другие конторы (даже на забугор).
    ТК допускает удаленку, но на это идут оооочень редко (оно и понятно: налогов куча).
    Ответ написан
    7 комментариев
  • Почему Postgresql такой медленный?

    @thyratr0n
    Первый запрос не использует индекс. Похоже, что у таблицы нет PRIMARY KEY.
    Второй запрос тоже не понятный. Похоже, что user_id содержится в комплексном индексе, типа (user_type, user_id), и т.к. не задействуется первое поле в запросе, то запрос тормозит.

    Нужен DDL таблицы - без него это все напоминает гадание на кофейной гуще.
    Ответ написан
    Комментировать
  • Открывать ИП или нет?

    @thyratr0n
    Поторопились с выводом.
    Я ИП работаю уже 5-й год. Да, налоги плачу. Да, акты есть. Но крупным работодателям это на руку, и им лучше с ИП работать, чем в "черную". Конкретно я сейчас работаю на забугорную контору, с которой взаимодействие без ИП было бы невозможно.
    Не хотите отчетности? Покупайте патент: никаких налогов и деклараций - только в ПФР платить фиксированную сумму (раз в год). И да, если захотите креди/ипотеку/итд, то без ИП вам ничего не дадут, ибо вы просто подтвердить доход не сможете (не будете же вы 13% НДФЛ уплачивать ежегодно).
    Если же вы именно фрилансер со всеми вытекающими, то тогда, конечно, нет смысла.
    Ответ написан
    Комментировать
  • Кто-нибудь уже работает через патент "для айтишников"?

    @thyratr0n
    Нет, смысла нет по патенту работать. Чтобы выйти на сравнимый уровень выплат налогов по УСН и патенту, надо иметь доход ~1.3 млн/год. В этом случае разницы по выплатам не будет никакой. Если доход больше, то патент уже выгоднее.
    Для моей, Кировской, области, сумма выглядит дикой. Совокупный доход по патенту значится 770к/год. Млин, ремонт и обслуживание оргтехники - всего 320 к/год. При этом, средняя з/п того же веб-разработчика в Кирове не более 40к/мес. Откуда ответственные господа берут эти цифры - не понятно.
    Ответ написан
  • В какой момент пора использовать ООП?

    @thyratr0n
    Что-то даже хз, что и ответить... ООП - это принципиально иная парадигма разработки, нежели процедурный стиль. Вообще, ваш случай довольно интересный, когда аж 5 лет устраивает процедурный стиль.
    Во всяком случае, на текущих проектах ООП лучше не внедрять (огребете проблем). А вот что-то новое можно и начать.
    Ответ написан
    Комментировать
  • Как ускорить работу программисту?

    @thyratr0n
    Вот, никогда не задумывался над этим.
    Говоря о себе... Я не использую ни таймтрекеры, ни тайм-что-то-еще, ни фломастеры (тем более цветные), ни тетрадки, и тд, а так же не смотрю на других коллег. У меня такой склад ума: меня всякие "рисовалки", коллективное планирование и тд только отвлекают и утомляют. Возможно, из-за этого мне будет сложно что-то внятное посоветовать, но...
    1. Работать, как можете. Не надо стремиться к звездам, ибо, если задатки есть, оно само проявится. Так у вас выработается правильная самооценка.
    2. Читать литературу, умную, и не "С++ за месяц", а "Архитектура корпоративных приложений" и иже с ней. Так у вас появится теоретическая платформа для понимания как микро-архитектур, так и более серьезных вещей.
    3. Наблюдать за собой, чтобы понять: в какие периоды суток вам наиболее комфортно работать (в какое время у вас наиболее высокая производительность), и какие факторы на это влияют. Так вы сможете планировать.
    4. Не стремиться заучивать наизусть синтаксис и семантику языков, но знать какие-то общие вещи, а так же места, где можно быстро найти ответ. Так у вас появится свободное место в голове.

    В общем, трудитесь, читайте литературу, и все будет хорошо.
    Ответ написан
    Комментировать
  • Как правильно писать unit тесты?

    @thyratr0n
    Непонятно, что вы хотели получить в ответ, ибо не задали четкого вопроса.

    Во-первых, вы, конечно, "удачно" выбрали Yii первой версии в качестве примера. Эта фреймворка не очень приспособлена для изготовления "тестопригодного" кода, ибо содержит на всех стадиях функционирования большое количество "магии". Не верите? Попробуйте что-то наваять на базе CActiveRecord и запилить юнит-тесты. У вас получится что угодно, но не то, что надо.
    Самый главный аспект юнит-тестирования состоит в том, что один тест (метод класса-теста) должен решать строго одну задачу, а не проверять в фоне целую подсистему.
    На одном из своих проектов я решил эту проблему, написав целую свору заглушек.
    Во-вторых, все зависит от задач. Грубо говоря, юнит-тесты проверяют код как есть. Следующий уровень тестов (не берусь его называть, ибо я их постоянно путаю) проверяет бизнес-сценарии. И самый высокий уровень проверяет все это дело в связке с внешними интерфейсами.
    И в-третьих, один тест не должен включать код других тестов, ибо каждый тест должен быть изолирован, считая, что весь остальной код работает. Именно поэтому, когда вы пишете, например, тест для мелкой модельки, не нужно гонять работу с БД: считается, что вся подсистема взаимодействия с БД _работает_.

    Да, и еще. Очень часто путают моки и стабы.
    Стаб - это заглушка - код, который "глушит" выполнения другого. Цель заглушки - проверка того, _что_ возвращает объект в своей работе. В вашем случае нужен какой-то объект, который не позволит коду выполняться далее LoginForm::login(). Как это сделать? При статической типизации кода - никак. Нужна надстройка, которая будет динамически использовать данные объекты, чтобы их можно было заменить на стабы.
    Мок - это надстройка над тестируемым объектом, целью которой является проверка того, _как_ работает объект внутри, именно поэтому моки всегда строятся на Reflection.
    Ответ написан
    4 комментария
  • Что следует знать для самостоятельной сборки ПК?

    @thyratr0n
    Сначала не по теме.
    Извините, но фигею, конечно, от вопроса. Я свой комп покупал 06.02.2006. И только в прошлом году уперся в производительность. Т.е. дело уже было даже не в старости винта или еще чего, а просто мои штатные рабочие программы (IDE, почта + 2 браузера) стали просто издеваться над ним (версии растут - требования к ПО растет). И то я вытянул еще полгода на том, что купил SSD и корень системы с рабочим ПО туда перенес. Конфа была такая: Sempron 3000+, 4Gb DDR2 (остальное не имеет значения). Т.е. вполне может быть, что вам просто винт надо заменить.
    Теперь по теме.
    Шаги апгрейда такие.
    1) Раз у вас 2007г, то память должна быть уже DDR3. Купите пару планок по 2 гига. Вставьте и посмотрите. Если работа станет комфортной, то на этом и остановитесь.
    2) Если нет, то купите новый винт. Советую WD Black на 1Т (найти - придется постараться.). Они, правда, шумные, но быстрые и надежные. Перенесите туда все. Если работа снанет комфортной, то на этом и остановитесь.
    3) Если нет, значит вам не хватает уже проца. Тут - только новый апгрейд. На этом этапе определяетесь с материальными возможностями.
    4) Определитесь с задачами. Если играть не собираетесь, то хватит и встроенной видюхи.
    5) Если денег по более, то i5 - ваше все. Если нет, то AMD подберите. Они печки, так что для них надо найти кулер с медным радиатором.
    6) Постарайтесь подсчитать все так, чтобы у вас осталось в запасе 6-8к. Если производительность новой системы (куда вы уже ранее купленную оперативу и винт сунете) устроит, то на заначку можно обмыть :)
    7) Если нет, идете покупать SSD для системы и "этих ваших фотошопов". Переустанавливаете туда все и радуетесь жизни. Тут могу только SSD фирмы Intel посоветовать. Остальных даже не смотрел никогда.

    Итого: вполне реально уложиться в 30к даже с SSD.
    Ответ написан
    Комментировать
  • Как наиболее правильно подойти к обучению программированию с нуля?

    @thyratr0n
    Сам учился так же нифига не на околоITшной спец. Книги не читал никогда специализированные - только общетеоретические (DDD, Design Patterns etc.). Языки (PHP, Phyton) изучал по мере выполнения задач.
    Проблема в изучении сразу большого числа литературы в том, что в голове образуется каша, и как ее применять на практике, далеко не всегда ясно. Так что, имхо, на книги можно смело забить и начать смотреть различные good practice и готовые проекты по различным фреймворкам/CMS, попутно стягивая их себе и пробуя "тыкаться". Так получите гораздо быстрее практические навыки. Потом можно "сухую теорию" по разработке смотреть.
    Конечно, базовую теорию по языку тоже надо почитать, но на это потребуется вряд ли больше одного-двух вечеров.
    Но все это при условии того, что в общем и целом понимание того, что такое программирование, присутствует. Если нет, то Turbo Pascal в помощь для изучения общих принципов алгоритмистики.
    Ответ написан
    Комментировать