• Как правильно создать БД в одном execute?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Обычно БД создается во время процессов CD/CD через технологии liqubase/flyway.
    Таблицы тоже. В этом есть смысл потому что БД и таблицы это такие долго-живущие объекты
    и кроме того не лежащие в плоскости транзакций. Они - выше транзакций и их надо логически
    отделять от прочего java кода. А в java коде - оставить insert/update/delete.
    Ответ написан
    5 комментариев
  • Какой выбрать протокол для подключения сетевого диска вне локальной сети?

    @rPman
    * http (лучше https но тогда нужен на машину источник файлов а это значит + домен либо самоподписанные сертификаты) с авторизацией
    По этому протоколу можно работать откуда угодно, но с каталогами будет неудобно
    Промежуточный вариант webdav, это надстройка над http, но поддерживается майкрософт вплоть до монтирования в файловую систему и работа из проводника

    * scp (штатный механизм ssh) - самая простая настройка для сервера, наиболее надежный (встроенное шифрование и сжатие трафика), но нужны клиенты с поддержкой scp (все популярные файловые менеджеры умеют, типа far commander или total commander)
    Есть еще sftp, он немного отличается как более продвинутый (под linux есть fuse модуль для монтирования его в каталог), реализация идет штатно с ssh (ну или я привык что такие вещи в linux легко) так же поддерживается популярными клиентами работы с файлами

    * любые инструменты синхронизации, когда вместо доступа к файлам по какому либо протоколу, они копируются и синхронизируются автоматически таким образом что размещены на всех машинах где нужен доступ.
    Собственно все популярные централизованные системы типа dropbox/Google Drive/OneDrive и т.п. работают по этому принципу, но в довесок данные копируются еще и на сервера компании этого инструмента.
    Я рекомендую использовать открытый проект Syncthing - он не копирует файлы ни на какой сервер, и поддерживает любые ОС от windows до android (очень прикольно настраивать синхронизацию через промежуточное устройство типа смартфон, позволяющее синхронизировать файлы между закрытыми сетями)
    Ответ написан
    2 комментария
  • Как разместить календарь в Postgresql?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега PostgreSQL
    Седой и строгий
    Для расписаний подходит тип tsrange с GiST-индексом.
    Ответ написан
  • Какая база данных подходит для частых UPDATE и сортировки?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Подходит любая БД. Вопрос в том чем вы готовы пожертвовать ради скорости. Например вы можете хранить данные в backend (hashtable) и сбрасывать их в БД периодически. Эта схема идеально работает. Вам только надо с самим собой и с бизнесом поговорить о гарантиях. Что вы хотите? Чтоб любой вектор {id, data, user_date} сохранялся в ту-же микросекунду или вы можете эти изменения отложить на потом и применить их в БД через 15 минут например в виде
    batch-update.

    Поэтому вопрос оптимизации БД - это вопрос не только технически но и организационный. А запись в Postgress в через длинный сетевой стек да еще и с фиксацией транзакции это такое яростное безкомпромиссное решение
    которое не всегда и нужно.


    Договаривайтесь с ценностью бизнес-информацией и с компромиссами.
    Ответ написан
    Комментировать
  • Почему нельзя/можно писать бизнес-логику в sql?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Вопрос из серии "У меня есть своя дурацкая точка зрения, которую я ни сформулировать толком не могу, ни подкрепить никакими доводами. Давайте, переубеждайте меня!"

    Вы просто не поняли статью, которую читали.
    Там говорятся банальные вещи о том, что бизнес-логика не должна завязываться на конкретное хранилище. То есть там было сказано ровно противоположное тому что у вас. Не "БЛ нельзя писать в SQL", а наоборот - в бизнес логике не должно быть SQL. Просто потому что чистый код и разделение ответственности. Сейчас у вас SQL, завтра эластик, а послезавтра микросервис по НТТР. Да, БД, которыми пользуются все три, "осталась та же самая". Способ ходить в неё поменялся.
    Плюс тупо упрощается код, с ним проще работать. БЛ отдельно, БД - отдельно. Именно об этом и говорится в статье.

    Но могу вас утешить. Всё это говорится про более-менее сложные приложения.
    Говнокодить свою домашнюю страничку про котиков, или интернет магазин по продаже мёда с пасеки любимого дядюшки вы можете как угодно, хоть в SQL, хоть в Brainfuck-e.
    Ответ написан
    5 комментариев
  • Как получить ключ 1-го уровня по значению из массива 2-го уровня?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    echo implode(
    	', ',
    	array_filter(
    		array_keys($arr),
    		fn($key) => in_array($person, $arr[$key]),
    	),
    );
    Ответ написан
    Комментировать
  • Как получить ключ 1-го уровня по значению из массива 2-го уровня?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Серфить примеры не надо.
    Надо запомнить одно очень простое правило: все операции над массивами производятся в цикле.
    Это очень просто запомнить. И даже понять.
    Массив - это набор данных.
    Чтобы что-то в найти в этом наборе - его надо перебрать.
    Вот и перебирайте. Как только нашли нужное значение - вот ваш ученик.
    Вам знаком оператор foreach?
    Ответ написан
    Комментировать
  • Нагружает ли RSS фид сайт?

    @Kostik_1993
    Web Developer
    Говорят файлы можно не только на лету генерировать, но и складывать в папку и отдавать как статику
    Ответ написан
    Комментировать
  • Как составить sql запрос?

    @Akina
    Сетевой и системный админ, SQL-программист.
    WITH
    cte AS (
      SELECT *, ROW_NUMBER() OVER (PARTITION BY document_id ORDER BY job_id DESC) rn
      FROM my_table
      )
    SELECT document_id, job_id, person_id
    FROM cte 
    WHERE rn = 1;

    И в качестве бонуса
    SELECT DISTINCT 
           document_id,
           MAX(job_id) OVER (PARTITION BY document_id) job_id,
           FIRST_VALUE(person_id) OVER (PARTITION BY document_id ORDER BY job_id DESC) person_id
    FROM my_table
    Ответ написан
    Комментировать
  • Как сделать ограничения кликов по времени?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Вы можете использовать любое хранилище - БД, куки, локальное хранилище, сессию.
    Куки и localstorage в принципе можно поправить или вовсе очистить средствами браузера.
    БД или php-сессия в этом смысле более надежна.

    А сам принцип один, вне зависимости от того, какое хранилище вы будете использовать.
    1. Клик
    2. Проверить, сохранено ли время предыдущего клика
    3.1. Если нет, то разрешить голосование. И сохранить время.
    3.2. Если да, то проверить время.
    3.2.1. Если прошло достаточно, разрешить голосование и сохранить время
    3.2.2. Если нет, ничего не делать или сообщить пользователю, что он слишком увлекся.
    Ответ написан
    Комментировать
  • Оптимизируется ли UPDATE, если значения полей на самом деле не меняются?

    Melkij
    @Melkij
    PostgreSQL DBA
    В postgresql создаётся физически новая версия строки при update (с обновлением всех индексов либо hot update если применимо) даже если ни одно поле не меняет своё действительное значение. Есть встроенный триггер suppress_redundant_updates_trigger, который можно повесить на таблицу, тогда ничего действительно не меняющий в данных update будет пропускаться.

    Если меняется хотя бы одно значение - оптимизации не подлежит, должна быть записана новая версия строки в таблицу (чтобы MVCC обеспечить). Если возможно, оптимизация HOT update исключит сопутствующее обновление индексов.
    Ответ написан
    9 комментариев
  • Какую базу данных лучше использовать для чата?

    vabka
    @vabka
    Токсичный шарпист
    Да в общем то любая реляционная вполне справится с этим. Только тебе нужно будет данные из классов на таблички переложить.

    Чтобы конкретнее сказать - нужно больше информации
    Ответ написан
    2 комментария
  • Каким образом определяют наиболее старую версию python для работоспособности кода?

    Melkij
    @Melkij
    PostgreSQL DBA
    - у тебя какой версии X?
    - Y
    - ага, а у меня Z. Значит напишем "не тестировалось с X версии ниже Y"


    Спустя время
    - давай поднимем минимальную версию до Z, смотря какая там фича полезная нам была бы
    - хм, вышел он N времени назад, проблемой оказаться не должно, не возражаю, добавь только в доку "требуется X версии минимум Z"


    Так оно и происходит обычно.
    Ответ написан
    Комментировать
  • Как исправить ошибку при отправке запроса?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега MySQL
    Вот они, красным подсвечены:
    650027f3b8902774711648.png

    Это синтаксис PostgreSQL, а не MySQL - в это главная ошибка.
    Ответ написан
    Комментировать
  • Как с помощью регулярки вытащить значения в квадратных скобках?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    <?php
    
    $input = '[IMG l="image.jpg" t="Картинка для баннера" d="Скрытое описание"]';
    
    $result = preg_replace(
        '!\[IMG l="(.*?)" t="(.*?)" d="(.*?)"\]!si', 
        '<img src="$1" alt="$2" data="$3" />', 
        $input
    );
    
    var_dump($result);
    Ответ написан
    4 комментария
  • Как ускорить запрос Select живом поиске?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Если поисковый запрос начинается с символа %, то индекс толком не используется.
    Вам нужен либо fulltext index и соответствующий запрос, либо сторонний поисковый движок типа эластика или мантикоры

    Или хотя бы перенести сайт с того утюга, на котором он хостится сейчас, на нормальный сервер. Потому что 10 секунд на перебор трех сотен тысяч строк - это запредельные какие-то цифры.
    Ответ написан
    Комментировать
  • Какие дорожные карты посоветуете для полного изучения линукса?

    mayton2019
    @mayton2019
    Bigdata Engineer
    для полного(или основ) изучения линукса? (Кибербезопасность)

    Вот ты чудак. Как же ее (кибербезопасность) можно полностью выучить если она каждый год меняется.
    Меняются угрозы. Софт обновляется. Безопасник - тот-же вечный студент. Учится на новых угрозах.

    А ты хотел взять Катахезис или Библию и вот так все одним махом прочитать?

    Если ты решил конкретно сдавать на сертификацию - то вот смотри какие знания нужны для именно
    этого. Учебные центры предлагают свои планы обучения. Я с ними не спорю. Их видение.
    Ответ написан
    Комментировать
  • Как обойти задержку кэширования новости и сразу же получить ее с сервера?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я думаю что ничего ты на сайте не сможешь сделать. Просто новости публикуются с задержкой.

    Бери сведенья с телеграм канала напрямую.
    Ответ написан
    Комментировать
  • SQL запрос к БД через WordPress в 46 раз дольше чем через phpmyadmin?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Во первых нужно нормально писать запрос, хотя бы для понимания что вы делаете:
    SELECT DISTINCT tt.term_id 
    FROM wp_term_relationships AS tr 
    JOIN wp_term_taxonomy AS tt 
    ON tr.term_taxonomy_id = tt.term_taxonomy_id 
    JOIN wp_terms AS t 
    ON tt.term_id = t.term_id 
    WHERE tr.object_id IN (
       SELECT p.ID 
       FROM wp_posts AS p 
       JOIN wp_term_relationships AS tr 
       ON p.ID = tr.object_id 
       JOIN wp_term_taxonomy AS tt 
       ON tr.term_taxonomy_id = tt.term_taxonomy_id 
       JOIN wp_terms AS t 
       ON tt.term_id = t.term_id 
       WHERE p.post_type = 'product' 
       AND p.post_status = 'publish' 
       AND tt.taxonomy = 'product_cat' 
       AND t.term_id = '2961' 
    ) 
    AND tt.taxonomy LIKE 'pa_%';

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

    Ну и в третьих, запросы без лимита почти всегда будут медленными, так как бд вынуждена перебирать все таблицы перебором. Если же такой запрос необходим по каким то причинам, то стоит посмотреть что же происходит с запросом. Нужно в первую очередь сделать отдельно вложенный запрос, проверить как он работает, оптимизировать, а затем то же самое сделать с внешним. Так же неплохо прогнать эти запросы через explain, посмотреть каких индексов не хватает. Ну и первое на что стоит обратить внимание это tt.taxonomy LIKE 'pa_%', что само по себе затратно, и требует обязательного индекса.
    Ответ написан
    Комментировать
  • Как сделать уведомления в телеграмм при входе на сайт?

    @zkrvndm
    Софт для автоматизации
    У вас подход изначально неправильный.

    1. Ни в коем случае нельзя ключи от API в открытом виде размещать на своем сайте

    2. За отправку уведомлений должен отвечать тот же скрипт, который отдает html-страницу

    3. В случае с php просто делаете запрос на API телеги используя CURL, примеров в сети полно

    https://vk-book.ru/otpravka-soobshhenij-v-telegram...
    Ответ написан
    Комментировать