Задать вопрос
  • Что значит diskstats_utilization/vg0_root?

    @remzalp
    Программер чего попало на чем попало
    Значит, что у тебя файловые операции почти упираются в потолок по пропускной способности носителя. Если всё нравится, то недельку можно не переживать.

    Учитывая годовой график - скоро (месяцы) нагрузка на сервер превысит возможности системы хранения и начнутся тормоза. Так что имеет смысл, пока еще спокойно - искать причины такой нагрузки, заниматься оптимизацией, масштабированием.

    Если БД виновата, можно попробовать перекинуть её на отдельный сервер или сделать master-slave репликацию, тогда master будет грузиться в основном на запись, а slave больше на чтение. Но это имеет смысл, если у тебя чтений сильно больше, чем записей.
    Ответ написан
    2 комментария
  • Как называется атака, когда шлют много параллельных запросов (не DDOS)?

    @azShoo
    Это выглядит как эксплуатация Race Conditions в коде.
    Название конкретной атаки я вам не скажу, и не уверен, существует ли оно в принципе.
    Ответ написан
    2 комментария
  • Как называется атака, когда шлют много параллельных запросов (не DDOS)?

    Почему не DOS то? Это просто одна из вариаций: зафлудить сервис ненужными запросами до состояния отказа в обслуживании валидных запросов.
    (D)DOS не заключается только в забивании канала. Пул обслуживаемых запросов - тоже цель этой атаки.
    Ответ написан
    4 комментария
  • Есть ли необходимость в unsigned integer id для one to one отношений?

    Therapyx
    @Therapyx
    Data Science
    Это обычная практика при проэктировании таблиц. Есть primary key и есть foreign key. В данном случае user_id в таблице. Первичный ключ должен быть всегда "уникален". Если не айди, то что тогда возмешь ты как уникальность всех строк? В противном случае придется брать comments или Likes или votes или notifications или же комбинации из них. Но где гарантии, что не попадется 2 одинаковые комбинации к примеру из коммента и нотификации.? Да и ставить ключ с тем же комментом ххх символов? ))
    Надеюсь разьяснил внятно )
    Ответ написан
    9 комментариев
  • Как загрузить разные отношения для morphs отношений?

    greabock
    @greabock
    Могу
    Есть, по крайней мере, три способа сделать это.

    1) Использовать `morphedByMany`
    на православном
    на буржуйском
    class Note extends Model
    {
        public function second()
        {
            return $this->morphedByMany(SomeModelSecond::class, 'taggable');
        }
    
        public function first()
        {
            return $this->morphedByMany(SomeModelFirst::class 'taggable');
        }
    }

    Notes::with('first.relationFirst',  'second.relationSecond');

    Хотя это и приводит к изменению структуры дерева отношений, этот способ кажется вполне разумным.
    Вы можете по прежнему использовать `morphTo()` там, где не требуется жадная загрузка различных отношений.

    2) Использование глобальной жадной загрузки
    доки нет - личный опыт и кусочки сырцов:

    class SomeModelFirst extends Model
    {
        public $with = ['relationFirst'];
    
        public function notes()
        {
            return $this->morphMany(App\Note::class, 'noteable');
        }
    
       public function relationFirst()
        {
            return $this->belongsTo(Photo::class);
        }
    }

    class SomeModelSecond extends Model
    {
        public $with = ['relationSecond']
    
        public function notes()
        {
            return $this->morphMany(App\Note::class, 'noteable');
        }
    
       public function relationSecond() {
            return $this->belongsToMany(Comment::class);
       }
    }

    однако, следует понимать что теперь эти связи будут загружаться жадно всегда, за исключением тех случаев, когда вы явно или косвенно вызываете newQueryWithoutRelationships . Например тот же самый метод with() перекрывает $with указанный в модели.
    Таким образом, можно обыграть эту особенность метода, сбросив жадно-загружаемые отношения
    SomeModelFirst::with([])->get();

    3) Ручная группировка коллекций.
    на православном
    на буржуйском
    $notes = Notes::with('noteable');
    
    $notesGrouped = $noted->groupBy(function($model){
        return get_class($model);
    });
    
    $notesGrouped[SomeModelFirst::class]->load('relationFirst');
    $notesGrouped[SomeModelSecond ::class]->load('relationSecond');

    Так как объекты в php передаются по ссылке, в моделях исходной коллекции $notes теперь будут загружены необходимые отношения. Этот способ кажется наименьшей болью.

    Наверняка найдутся и иные способы сделать это. Но прямо сейчас мне довольно лениво думать об этом =)
    Ответ написан
    2 комментария
  • Как загрузить разные отношения для morphs отношений?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Ну, думаю магия тут не сильно поможет. Либо любой noteable экстендит какой-то абстрактный класс, реализующий dummy релейшены, либо разделяй noteable на someModelFirst(), someModelSecond() и прогружай по отдельным условиям.

    Конечно же, можно извратится и оверрайднуть метод, отвечающий за поиск релейшена - но это бред, так делать не нужно =)
    Ответ написан
    Комментировать
  • Делать 1 большую таблицу или разбивать на части?

    solotony
    @solotony
    покоряю пик Балмера
    "лучше" или "хуже" - применительно к чему ?

    если к теоретическим "нормальным фомам" - это одно
    если к скорости выборки - это другое
    если к объемам хранимых данных - это третье

    например на скорость будут влиять - какой диск, какая б/д, какие таблицы, какие доступны лимиты по памяти, по процессору.

    20 - это не огромное значение. вот когда их 200 или 2000 ... нужно смотреть на определенность этих параметров, на их дублирование. если они все определены - тогда эффективнее (с любой точки зрения) их хранить в одной таблице, если из 20 заданы 5 - тогда разбивать на сущность/атрибуты/значения (я бы так поступил).

    опять же - если параметры неизменяемы и по ним нет выборки - может их эффективнее хранить в одном поле в JSON ?

    в общем все очень индивидуально относительно конкретной задачи и универсального рецепта нет.

    а конкретно в случае бд недвиги я бы пошел таким путем

    1) таблица объектов (тип объекта, тип сделки аренда/продажа)
    2) таблицы параметров по каждому типу объектов
    3) таблицы параметров по каждому типу сделок
    Ответ написан
    Комментировать
  • Делать 1 большую таблицу или разбивать на части?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Чтобы не громоздить тонны колонок и делать по канонам 3 нормальной формы — разделяют сущности, атрибуты и их значения отдельно.

    Свойства обычно хранят отдельно( у них могут быть свои поля)
    5a68a3b0baf0c785050166.png
    а значения к ним тоже отдельно (EAV)
    product_id, feature_id, value (где featured_id — id свойства из таблички выше)

    пример с моего интернет-магазина — 1 товар, много характеристик
    5a68a6c2b19f2067082314.png

    Пример запроса:
    SELECT   p.id, p.url, p.name
    FROM e_products p		
    WHERE 1 
    AND p.id in (SELECT product_id FROM e_options WHERE feature_id=8 AND value in('Бежевый','Белый') )
    AND p.id in (SELECT product_id FROM e_options WHERE feature_id=1 AND value in('Лето 2011') )
    время выполнения запроса — 0.019 s для 10 тыс товаров, 100тыс значений свойств и десятка свойств

    В запросе два параметра фильтра (1 значение коллекции и 2 значений цвета, выше можете увидеть в табличке)
    как понимаете — строку с нужным свойством подставляете в зависимости от GET запроса...

    * Можно упростить — вместо feature_id хранить сразу название параметра, но лучше сразу разделите... чтобы можно было параметру поставить напрмиер поле включать или нет его в фильтр и задать порядок, или нужно будет выводить поля в саму форму фильтра (гонять большую таблицу — так себе решение)
    Ответ написан
    3 комментария
  • Безопасно ли хранить в сессиях user_id?

    mashletov
    @mashletov
    Math.random()
    Безопасно. Не понимаю, что может произойти, если узнали user_id пользователя. На некоторых сайтах он в открытом виде в url прописан.
    Ответ написан
    1 комментарий
  • Безопасно ли хранить в сессиях user_id?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Laravel
    Вполне безопасно. При cookie-based авторизации id пользователя же тоже в сессии хранится.
    Ответ написан
    2 комментария
  • Где хранить собственные библиотеки?

    zvermafia
    @zvermafia
    WebDev
    Я делаю так, создаю папку /app/Supports и там храню части проекта как пакеты. Например так:
    /app/Supports
        /Cart
            /Facades
                CartFacade.php
            Cart.php
            ServiceProvider.php


    И регистрирую провайдеры и фасады (алиасы) в /config/app.php.
    Ответ написан
    Комментировать
  • Какие инструменты используют для мониторинга бекенда?

    DevMan
    @DevMan
    sentry.io
    тащемта таких сервисов немало. сентри указал только потому, что его можно развернуть у себя.
    Ответ написан
    4 комментария
  • Как организовывается дублирование данных отношений?

    Vadiok
    @Vadiok
    Веб разработчик
    Как я понимаю, особенного ничего нет, как вы и написали, храните поля кроме region_id, также region_name и т.п. Чтобы все корректно обновлялось можно повесить триггер на сохранение локации и проверять, если $location->isDirty(['region_id']), то обновлять region_name перед выполнением сохранения в базу.

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

    PS. Насколько я понял, у вас должно быть belongsTo вместо hasOne.
    Ответ написан
    1 комментарий
  • Как правильно хранить большие объекты с вложенными сущностями?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Очень похоже на многомерный куб. Смотрите в сторону OLAP и, соответственно, в сторону схемы БД "звезда". Хотя, в Вашем случае может быть более приемлемой "снежинка".
    Создаёте одну таблицу объектов со сложным ключом, содержащим поля со ссылками на таблицы измерений. Измерения - это расположение, оферы, коммуникации и т.п. Нормализация пострадает, увеличатся затраты на регистрацию/изменение/удаление объекта, но анализ в таком кубе будет идти оптимальнее.
    Ответ написан
    Комментировать
  • Зачем получать и обновлять весь объект модели при изменении нескольких полей?

    Потому что они заложники концепции ORM где работа ведётся исключительно с объектами https://ru.wikipedia.org/wiki/ORM и https://habrahabr.ru/post/237889/ т.е. минимальная категория для выборки - это объект.
    Ответ написан
    Комментировать
  • Как обновить 1 конкретное значение в json поле mysql 5.7?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    JSON_REPLACE(`json_value`, '$.key1', 'newValue1', '$.key2.key1', 'newValue2')
    Ответ написан
    2 комментария
  • Как лучше хранить и модифицировать json конфиг?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Это достаточно высокий и хороший уровень конфигурирования приложения. Из реальной жизни посмотрите на maven или grunt, у них то же самое. Особенно maven - максимум, что они можно выжать - более удобный способ отображения XML, например, в Eclipse или IDEA, чтобы было легче воспринимать структуру файла. К тому же само наличие файла конфигурации уже повышает уровень восприятия вашего приложения. Я бы не стал задумываться о "программировании" конфигурации и раскладывания его параметров по базе, т.к. такие суть именно в том, что такие конфиги и должны храниться в одном месте, а не раскидывать значения по таблицам, чтобы отдельным процессом собираться в этот файл да ещё и с ошибками, возможно.
    Ответ написан
    4 комментария
  • Как лучше хранить и модифицировать json конфиг?

    edli007
    @edli007
    full stack, team lead
    В монге это все сохранится одной командой, но база данных по одной узкой задачи не выбирается.
    Ответ написан
    3 комментария
  • Как обычно объединяют 2 сущности в одну?

    @dtestyk
    тут есть решения с использованием сторонних библиотек
    еще варианты с примерам на fiddle
    а вообще ваш вполне хорош(кроме модификации чужого объекта response)
    Ответ написан
    Комментировать
  • Как в Angular $rootScope передать переменную из шаблона?

    HoHsi
    @HoHsi Автор вопроса
    Можно сделать так
    <script type="application/json" json-data ng-model="screens")>{...<JSON>...}</script>
    Ответ написан
    Комментировать