• Зависит ли скорость записи в БД от количества в ней записей?

    yesbro
    @yesbro
    Думаю, помогаю думать
    1. Меняется/Зависит ли как-то скорость записи в таблицу БД от количества записей в таблице?


    При добавление записи в таблицу обновляются индексы (если они там есть), так что чем больше таблица тем медленнее будет запись (если в таблицы есть индексы кроме primery key). Это можно заметить если начать добавлять большое кол-во строк (построчно) в таблицу с индексами. Сперва добавление будет идти быстро, потом все медленнее и медленнее. Один из способов борьбы с этим - пакетное добавление.
    Ответ написан
    Комментировать
  • Изменять пропорции аватара на стороне фронта или несколько размеров на стороне бэка?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Веб-разработка
    Для такого маленького изображения я бы передавал только самый большой вариант.

    Экономия с точки зрения пользователя тут будет лишь в том случае, если везде используется 40*40, и, например, только в редакторе профиля показывается 100*100. Тогда люди в 99% случаев не будут качать лишние пиксели. Но их объём настолько мал, что заморачиваться нет смысла.
    Если же разные размеры используются повсеместно, то, делая три отдельных изображения, вы увеличите объём трафика на 21%, т.е. сделаете хуже и себе, и пользователю.
    Ответ написан
    2 комментария
  • Как записать массив PHP в базу данных MySQL?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Если массив не очень большой - сделайте всё одним запросом:
    <?php
    $data = [
        ['a' => 1, 'b' => 2, 'c' => 3],
        ['a' => 1, 'b' => 2, 'c' => 3],
        ['a' => 1, 'b' => 2, 'c' => 3],
        ['a' => 1, 'b' => 2, 'c' => 3],
        ['a' => 1, 'b' => 2, 'c' => 3]
    ];
    
    $query="INSERT INTO t (a, b, c) VALUES " . implode(
        ', ', 
        array_fill(
            0,
            count($data), 
            '(' . implode (', ', array_fill(0, count($data[0]), '?')) . ')'
        )
    );
    
    echo $query;
    
    $values = array_reduce(
        $data,
        function($ac, $el) {
            return array_merge($ac, array_values($el));
        },
        []
    );
    
    var_export($values);
    
    $q=$pdo->prepare($query);
    $q->execute($values);


    Здесь вы можете протестировать код
    Ответ написан
    1 комментарий
  • Как присвоить одному сайту разный IP?

    saboteur_kiev
    @saboteur_kiev Куратор тега Компьютерные сети
    software engineer
    объединить сети.
    Ответ написан
    Комментировать
  • Как присвоить одному сайту разный IP?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    При такой постановке вопроса, очевидно, воткнуть в сервак ещё одну сетевуху, а в неё шнурок второй сети.
    Ответ написан
    Комментировать
  • Есть ли фриланс на С++ с нуля?

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

    Умение анализировать рынок и управлять на фрилансе часто важнее, чем умение кодить.
    Были бы навыки - можно вообще без умения кодить
    Ответ написан
  • Почему при выборке первых трех строк, MySQL просматривает все записи таблицы?

    @Akina
    Сетевой и системный админ, SQL-программист.
    почему этот запрос просматривает так много записей?


    Таков принцип работы у этой СУБД. MySQL сначала выбирает все соответствующие условиям отбора записи, и только потом применяет к ним ограничение количества. Правда, обычно в запросе ещё присутствует и сортировка.

    Подобный подход, кстати, ответственен за то, что при одинаковом количестве отбираемых записей чем больше начальное смещение, тем больше фактическое время выполнения запроса, и на объёмных выборках даже используются специальные методы ускорения работы.

    Мне возвращается первые 3 строки.

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

    Вот, полюбопытствуйте: FIDDLE. Кстати, забавно, что без хинта оптимизатор выбирает вовсе даже не первичный индекс... Более того, в данном конкретном случае этому есть совершенно точное и строгое объяснение - попробуйте его найти.
    Ответ написан
    Комментировать
  • Как сильно будет замедлена скорость открытия сайта, если в .htaccess много правил блокировки по ip?

    @AlexVWill
    Это не задача Апач, любую задачу надо решать тем инструментом, который для этого предназначен. Для блокировки используется iptables, и надстройка ним fail2ban. Они эту работу сделают намного эффективнее.
    Ответ написан
    Комментировать
  • Может ли промежуточная таблица для связи 'многие-ко-многим' использоваться как отдельная сущность?

    hint000
    @hint000
    у админа три руки
    Во-первых, нет такого запрета.
    Во-вторых, в приведённом примере это действительно имеет смысл, поскольку у каждого поставщика цены могут меняться независимо от цен других поставщиков.
    Если не делать связь таблицы "Товар-Поставщик" с таблицей "Динамика цен", то это только усложнит структуру, а пользы не добавит. Поэтому да, есть смысл делать такую связь.

    Альтернативный вариант - это сразу сделать большую таблицу "Товар-Поставщик-Дата-Цена" и использовать её двояко: (1) для связи "Товар-Поставщик" используется ключ "Товар-Поставщик", (2) для динамики цен используется ключ "Товар-Поставщик-Дата". Ну, это, видимо, не соответствует нормальной форме, так что спорный вариант. Но считаю, что он имеет право на жизнь, в зависимости от количества данных, в зависимости от популярных запросов и т.д. Иногда полезно, а иногда не полезно.
    Ответ написан
    Комментировать
  • Как изменить запрос для того, чтобы поля (столбцы) создавались динамически?

    @alexalexes
    1;"Электрики";"Начальник объекта";"4 группа";"Иваныч";"АА1";1;"Дата рождения";1;"13.09.1986"
    1;"Электрики";"Начальник объекта";"4 группа";"Иваныч";"АА1";2;"Пропуск";2;"123-456789"

    Вот это перерабатывайте в подходящее представление в том процедурном языке, откуда выполняли запрос.
    То, что вы пытаетесь сделать - это не задача для SQL.
    Ответ написан
    2 комментария
  • Можно ли в mysql хранить 200 колонок, для 10+млн записей?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Смотрим здесь. Получаем для обычного INT 4 байта на одно число, для BIGINT 8 байт.
    200 * 4 * 10'000'000 = 8'000'000'000 или 8Gb.
    200 * 8 * 10'000'000 = 16'000'000'000 или 16Gb.
    По нынешним меркам сущие пустяки.
    Хранить, конечно же, нужно в нормальной форме, иначе суммирование придётся делать в приложении.
    Ответ написан
    3 комментария
  • Как лучше хранить много изображений для веб-приложения?

    @Drno
    в БД обычно хранится "ссылка" \ хеш на файл, а сам файл может хранится либо просто на диске в системе, либо на подключенном S3 к примеру, это уже как по деньгам \ удобству итд...
    Ответ написан
    7 комментариев
  • Как выбрать строку по определенному числу?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Дружище, data quality у тебя ужасное. Такие данные не должны попадать в реляционную БД.
    Лучше их как-то подчистить и нормализовать. И потом и запрос по подчищенным данным пойдет
    быстрее и индекс можно построить.
    Ответ написан
    Комментировать
  • Как удалить программу без обращения к пользователю?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    Отследить трекерами реестра и файловой системы - что создается, обычно это папка в program files, ключи реестра в HKEY_LOCAL_MACHINE и ярлыки - и удалить это все скриптом, не забыв перед этим прибить возможно запущенный процесс этой программы.

    На будущее - в msi надо не инсталлятор оригинальный запихивать, а последовательность действий из этого инсталлятора. Отловить можно все - как написал выше.
    Ответ написан
    Комментировать
  • Где и как хранить файлы пользователей?

    xez
    @xez
    TL Junior Roo
    1. Адреса должны быть относительными всегда
    2. Место хранения следует задавать переменной
    Ответ написан
    8 комментариев
  • На сколько популярно и корректно хранить данные в столбце в виде JSON строки?

    vabka
    @vabka
    Токсичный шарпист
    1. В реляционных базах - обычно это признак чего-то нехорошего, хотя сейчас во многих есть нативная поддержка JSON (в постгресе так она вообще очень хорошая)

    Это строки в JSON формате или отдельные таблицы?

    Можно и так и так, но
    2. Если бы я хотел такую структуру получить в ответе, то geo я бы хранил просто в отдельных двух колонках в адресе. Сам адрес - в отдельной таблице. Компанию - тоже в отдельной таблице.
    А для выдачи результата - джоинил.
    А если это всё относится только к сущности пользователя (тоесть нету такого, что несколько пользователей относятся к одной организации, которую нужно дедуплицировать) - можно всё в одной таблице и хранить, но в разных колонках (и просто при выдаче результата приводить это к объектной модели)
    Либо же иметь одну json-колонку, в которой иметь произвольное количество дополнительных/опциональных полей.
    Ответ написан
    Комментировать
  • На сколько популярно и корректно хранить данные в столбце в виде JSON строки?

    @Akina
    Сетевой и системный админ, SQL-программист.
    На сколько популярно и корректно хранить данные в столбце в виде JSON строки?

    А это зависит от того, что с этими данными делать.

    Если сохранить/вернуть - да, вполне.
    Если найти по фрагменту - 50/50, и зависит в основном инструментов, имеющихся в конкретной СУБД.
    Если выполнить более сложную обработку (сумма, в т.ч. с накоплением, среднее, медиана и пр.) - скорее нет.
    Если использовать для связывания по фрагменту - почти наверняка нет.
    Ответ написан
    Комментировать
  • Как можно ускорить выполнение SQL запроса?

    @Akina
    Сетевой и системный админ, SQL-программист.
    если `prop_id` in (1,2,3,...) штук 20, может быть и больше, запрос выполняется 18 секунд, что прям совсем много.

    Критичное количество значений в таком списке - порядка 7..10, дальше действительно запрос резко замедляется.

    Workaround: создаём индексированную временную таблицу в памяти, записываем в неё набор значений, используем в запросе:

    CREATE TEMPORARY TABLE criteria (prop_id INT PRIMARY KEY) ENGINE = Memory
    SELECT prop_id FROM (VALUES ROW(1), ROW(2), ROW(3), ...) criteria (prop_id);

    и потом

    select `product_id`, count(*) as `cnt`
    from `product_prop`
    NATURAL JOIN criteria 
    group by `product_id`
    order by `cnt` desc


    Ну а ускорить ORDER BY по вычисляемому полю - вообще без шансов.
    Ответ написан
    4 комментария
  • Как сделать разные bullets у двух слайдеров?

    @zhnyaka
    самый простой вариант это прописать классы от родителя
    .main-pagination .swiper-pagination-bullet {}
    Ответ написан
    Комментировать