• Как быстро сортировать в большой таблице по часто изменяемому полю?

    @dimuska139
    Backend developer
    А есть вариант хранить в redis значения ID пользователей и их баланса? Например, используя Sorted sets. При каждом изменении баланса каждого пользователя обновлять значения. То есть вытащить топ из редиса, по идее, проблемы не составит. И дёргать можно сколь угодно часто, а данные всегда актуальны.
    Ответ написан
    5 комментариев
  • Сколько зарабатывает сайт на гугл рекламе?

    @dimuska139
    Backend developer
    3 года назад сделал сайт про животных. По сути - статьи и описание пород. Народ стал заходить где-то через полгода, но поначалу крайне мало из-за того, что я не знал, как правильно заголовки делать и т.п., ибо разраб, а не сеошник. Сейчас посещаемость чуть больше 200 уников в сутки (статей у меня штук 150, пород в районе сотни), есть Адсенс, но за рекламу капают гроши (например, за сегодня я заработал 5 центов). Тем более что у Адсенса порог снятия суммы со счета идет от 100 долларов. Это еще копить и копить.
    Короче, делать статейник, на мой взгляд, беспонтовая затея, по крайней мере, сейчас. Выхлоп с этого копеечный, а статьи писать вскоре при любом раскладе надоест. Если их закупать, то в перспективе это все равно не скоро окупится. Тем более если закупать статьи по десятку в день - выйдет достаточно затратно. Зато я с этого сайта получил знания (Django и React, с использованием которых он сделан), которые мне принесли и приносят деньги на фриланс-проектах, что тоже неплохо. Сайт я в итоге закрывать не планирую, дорабатываю его по чуть-чуть (мне это интересно просто) - может быть, в дальнейшем к чему-то и приду, потому что посещаемость растет, хоть и медленно. Но доход именно с рекламы Адсенс - копейки (даже если посещаемость вырастет раз в 5), не думаю, что стоит на это вообще ориентироваться.
    Ответ написан
    Комментировать
  • Как найти слово сразу в трех разных таблицах в бд?

    @dimuska139
    Backend developer
    А через UNION пробовали?
    Ответ написан
    Комментировать
  • Как называется такое элемент в android?

    @dimuska139
    Backend developer
    https://developer.android.com/guide/topics/ui/cont... - это? Если нет, то найди там нужное))
    Ответ написан
    Комментировать
  • Изменить логику ORDER BY?

    @dimuska139
    Backend developer
    Так работает?
    SELECT * FROM product
        WHERE product .product_category = '2' 
    ORDER BY (product_subgroup='A'), product_subgroup
    Ответ написан
    3 комментария
  • Слышал, что go не очень подходит для написания сервисов с большим количеством бизнес логики, какое мнение у вас?

    @dimuska139
    Backend developer
    Вообще начать стоит с того, что понятие "с большим количеством бизнес логики" довольно растяжимое. Если говорить о микросервисах, то в них обычно много бизнес-логики и не получается. Потому что если такое начинает происходить, то стоит задуматься, а точно ли в микросервисе нет лишней ответственности? Возможно, стоит этот сервис поделить на более мелкие?
    Немного из личного опыта и не совсем по теме вопроса, мало ли пригодится. Я писал микросервисы на go и заметил следующие недостатки (лично для меня):
    1. В большинстве микросервисов бывают довольно простые запросы к базе данных и удобно было бы использовать что-то вроде Doctrine или SQLalchemy. В go, к сожалению, инструментов такого уровня нет. Gorm лично мне не понравился совершенно.
    2. Недавно была необходимость запилить сервис, взаимодействующий со Sphinx, но нормальных библиотек для Go для этой задачи внезапно не оказалось. Есть вот такая, но она устарела (еще не позволяет ее нормально юзать в несколько потоков). Неустаревшей и нормальной библиотеки вообще нет. Либо я плохо искал.
    3. Сложно сделать нормальную структуру проекта, чтобы не было циклических зависимостей. По крайней мере, вскоре начинает не покидать ощущение, что пишешь какой-то код низкого качества. Хотя может это субъективно или проходит с опытом.
    4. Если не запилить что-то типа контейнера зависимостей, то покрывать тестами проект становится неудобно, т.к. тесты при запуске в параллель начинают юзать одни и те же глобальные переменные. Опять-таки может и это субъективно.
    5. Во фреймворке gin/gonic сложно запилить нормальную валидацию для json. Если в структуре, на которую маппишь, поле типа int, а ты передал в json число в кавычках (строку вместо числа по сути), то поймать такую ошибку и выдать нормальную ошибку валидации невозможно, т.к. валидация там (в этом фреймворке) запускается после маппинга.

    Плюсы:
    1. Строгая типизация
    2. Результат компиляции - один бинарь
    3. Довольно интересный проброс ошибок (многим не нравится, мне понравился)
    4. Высокая скорость
    5. Низкое потребление памяти
    6. Есть потоки
    Ответ написан
    3 комментария
  • Cтоит ли писать магазин на чистом php?

    @dimuska139
    Backend developer
    Нет, не стоит, используйте CMS. Интернет-магазин - это типовой сайт, функциональность которого практически стандартна. Если писать самостоятельно, то будет крайне долго, ненадежно и не гибко. Я вижу такие плюсы использования cms конкретно для интернет-магазинов:
    1. Для cms-магазов есть куча готовых тем, но можно сделать и свою.
    2. Для cms-магазов есть куча готовых плагинов под любые нужды
    3. В случае чего, изменения в интернет-магазах на cms обычно гораздо дешевле выходят, и разработчика найти проще.
    4. Если делать магаз с нуля самостоятельно, то у него не будет готовой админки. Если делать на фреймворке, то она, может быть, и будет "из коробки", но либо не будет устраивать, либо ее придется сильно допиливать. В cms админка есть, причем она позволяет далеко не только добавлять товары, но и делать многие другие вещи, написание которых на фреймворке займет много времени.
    5. Какими бы некачественными в плане кода они ни были обычно (например, код не соответствует принципам PSR), CMS более надежны, потому что используются большим количеством людей (соответственно, проверяются и допиливаются постоянно). Самописные решения - нет. И хорошо если разраб хотя бы покрыл свой код тестами (что обычно не делается, кстати). То есть качество самописных решений нередко вызывает сомнения.

    Писать интернет-магаз вручную надо в таких случаях:
    1. Очень высокие нагрузки, CMS не справляется даже если используется кеш везде, где только можно.
    2. Очень нестандартный магазин, на CMS ложится плохо.
    3. Реально огромный (под 100к и более товаров) и сложный интернет-магазин
    Ответ написан
    Комментировать
  • Как убрать класс у неактивного элемента React?

    @dimuska139
    Backend developer
    Ты пытаешься использовать немного не тот подход. Тебе надо не убирать класс, а как раз его рендерить только для активного элемента. То есть при срабатывании onClick пиши в стейт некое значение, соответствующее твоему div-элементу. В сам метод render добавь при отрисовке каждого div условие с проверкой, равно ли его значение тому, что в стейте находится. Если да, то рендеришь класс clicked. Тебе для такой задачи пригдится библиотека classNames
    Ответ написан
    Комментировать
  • Как быстро трансформировать данные с таблицы А из 500М+ строк в агрегированную таблицу Б?

    @dimuska139
    Backend developer
    А если воспользоваться insert-select?
    Ответ написан
    Комментировать
  • Как избавиться от эффекта памяти в React?

    @dimuska139
    Backend developer
    Крайне рекомендую не пилить свои алгоритмы обработки формы, а использовать готовые проверенные решения вроде react-final-form или formik. Это очень сильно упростит Вам жизнь и избавит от тонн костылей и велосипедов.
    Ответ написан
    2 комментария
  • Форма сохраняется, её видно в панельке администратора, но на сайте отображения нет. Как решить проблему?

    @dimuska139
    Backend developer
    Вы в шаблон передаете notes, подразумевая, что там список заметок. Почему Вы notes в шаблоне не используете? Чтобы они, собственно, выводились.
    Ответ написан
    Комментировать
  • Как создать велосипед в django?

    @dimuska139
    Backend developer
    1. Можно. Я не использую админку Django, сделал свою админку на React
    2. Найди пример любого приложения на React на Github и там же пример любого приложения с django-rest-framework
    3. По-хорошему, надо юзать стандартную Django-админку, если твой сайт на Django (т.к. это экономит кучу времени), но если ты решил сделать свою (например, на React), то пишешь API, используя django-rest-framework и пишешь саму админку на React, которая будет с этим API взаимодействовать.
    Ответ написан
    5 комментариев
  • Как парсить через requests/bs4,сайт генерируемый через JS?

    @dimuska139
    Backend developer
    Нет, нельзя, потому что requests просто получает контент страницы (без выполнения js, естественно), а bs4 разбирает html. Selenium можно заменить разве что PhantomJS.
    Ответ написан
    Комментировать
  • Как сделать срез в Django ORM без all()?

    @dimuska139
    Backend developer
    Если Вы считаете, что из базы в данном случае вытаскиваются все записи, а потом на уровне кода часть из них обрезается, то это не так. all() не делает запрос к базе. Запрос вместе с LIMIT выполняется уже внутри пагинатора.

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

    @dimuska139
    Backend developer
    1 и 2. Учитывая, что SKU, как я понимаю, уникальное по смыслу значение, на нем висит UNIQUE индекс. Таким образом, можно читать csv-файл построчно и юзать on duplicate key update. Это позволит всего одним циклом обновить атрибуты или добавить недостающие товары в таблицу.

    3. Чтобы удалить продукты из базы Magento, SKU которых нет в CSV, надо блоками (по 100 строк, например) читать таблицу товаров в базе и проверять наличие этих SKU в csv-файле. Если не найдено, писать id в массив. После этого сделать удаление всех строк по этим idшникам с момощью sql-оператора IN. Если в массиве набралось очень много id-шников, есть смысл также разделить их на блоки, чтобы в IN не было очень много idшников. Это можно оптимизировать, если на шаге 1 и 2 в пхп-массив писать считанные из файла SKU (даже если там 100к строк, это не сильно много памяти отъест в данном случае) - тогда даже искать в csv-файле не надо будет, достаточно будет проверить просто наличие SKU, взятого из базы, в этом массиве.

    P.s. насчет 3. Возможно, было бы еще эффективней в таблицу с товарами добавить столбец, в который на шаге 1 и 2 в том же sql-запросе писать (или переписывать старое значение) текущую дату и время для обработанных записей. После чего всего одним запросом к базе выпилить из таблицы все, что старое (потому что если записано старая дата и время, значит, в csv-файле товара с таким SKU не было, и его можно удалить).
    Ответ написан
  • Какой инструмет выбрать для бэкенда?

    @dimuska139
    Backend developer
    Если ты предпочитаешь React и не хочешь PHP, я бы посоветовал тебе пилить API на Go (микрофреймворк Gin/Gonic) либо на Python (FastAPI, например). Чисто для API юзать огромных монстров типа Django избыточно. Но в то же время, как я понял, ты не хочешь прямо сильно заморачиваться, так что я посоветую тебе все же взять Django в такой связке:
    1. Django + django-rest-framework в качестве бэкенда
    2. React с тайпскриптом для фронтенда
    3. NextJS для рендеринга JS на сервере, чтобы с твоим сайтом "дружили" поисковые системы

    Почему именно Django? Да, для API она, возможно, избыточна, но в ней все равно много штук, которые нужны и работают из коробки. Те же миграции, например, ORM-ка, sitemap, какая-никакая админка и т.п. Все встроено, особо настраивать не надо. Поскольку ты предпочитаешь на фронте React, тебе django-rest-framework для этого очень пригодится.
    Минусы:
    1. Говорят, Django медленная. Ну, тут смотря с чем сравнивать. Питон весь сам по себе медленный. Да и все равно у нормальных проектов почти все отдается из кеша, так что разницы особой нет.
    2. Django в плане архитектуры не фонтан, "толстые модели" (модели, в которые впихивают логику на кучу строк кода) - такое себе.
    3. Если будут высокие нагрузки, то Django ORM тебе будет мешать. А если из Django убрать ORM, то смысла в ее использовании станет сильно меньше.
    Ответ написан
  • Как ускорить отправку письма при заказе?

    @dimuska139
    Backend developer
    Это надо делать через очередь. То есть человек жмет, грубо говоря, кнопку "отправить письмо", на сервере запускается задача отправки письма, отдается обратно ответ, что письмо будет отправлено, а сама отправка выполняется в фоновом режиме.
    Погугли насчет Gearman.
    Ответ написан
    Комментировать
  • Как составить логический оператор?

    @dimuska139
    Backend developer
    Советую для этих целей поставить удобную библиотечку classnames. С ней подобные конструкции (и гораздо более сложные) выглядят проще:
    const classNames = require('classnames');
    ...
    <div className={classNames( "form-textbox-label", {
       "field-active": this.state.fieldActive
    })}></div>
    Ответ написан
    Комментировать