Задать вопрос
  • Стартапы и Git?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    В зависимости от указанной в проекте лицензии.
    Для свободных лицензий - радуются и предлагают дружить семьями. Ну или ничего не предпринимают. Это называет форк. Один из важнейших постулатов свободного ПО.
    Для несвободных лицензий - поспрашивайте у копирастов. Всякие DCMA-запросы на удаление репозитория форка и прочие странные вещи.
    Ответ написан
    7 комментариев
  • Сложный запрос в MySQL, как сделать?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Приведите в нормальную форму - тогда это будет элементарный запрос.
    Нормальная форма - технический термин, если что.
    Ответ написан
    Комментировать
  • Можно ли просто копировать файлы MySql?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Текстовые? Нет, текстовые не выйдет. В /var/lib/mysql/ бинарные файлы. Чуток текстовых там, конечно, тоже есть, но данных в бинарных.

    Делаете копию каталога (внимание на права доступа и владельцев файлов, это тоже важно и их надо сохранить) datadir. По-видимому, у вас это /var/lib/mysql/
    Переносите на машину с той же самой версией mysql, лучше в точности ту же версию, но можно в пределах минорных версий. Попутно делаете ещё одну копию с данных.
    Разумеется, на новой машине на момент копирования mysql должен быть остановлен.
    Запускаете mysql, читаете логи, исправляете ошибки.
    Дальше по обстоятельствам. Если завёлся - то проверяете свои данные, если нет - читаете дальше логи и гугл.
    Innodb при успехе восстановится до последней зафиксированной транзакции. myisam - даже в лучшем случае как повезёт. Устойчивость к сбоям - это не про него.
    Ответ написан
    1 комментарий
  • Автоматический set в mysql?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Зачем set? Таблица связей типично состоит из пары внешних ключей на связываемые таблицы. Т.е. обычно два инта и составной первичный ключ.

    Возможность есть понаписать триггер. Только сначала хотелось бы понять смысл.
    Ответ написан
    Комментировать
  • Точка в имени пользователя sql?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    https://dev.mysql.com/doc/refman/5.7/en/account-na...
    dev.mysql.com/doc/refman/5.7/en/user-names.html
    Никак не повлияет. Допустимое имя. Иначе вы бы и не создали такого пользователя.
    Ответ написан
    Комментировать
  • Как правильнее настроить локальную сеть?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Карту сети делать всё-таки придётся, чтобы понять, где какие кабели и можно ли обойтись тупыми свичами или всё-таки потребуется что-то чуть более умное с VLAN.
    В общем - нафига вам сдался PPPoE?

    Засуньте каждую подсеть в отдельную L2 - физические порты на микротике, если разводка кабелей позволяет, или VLAN - но придётся свичи менять, на которые заходят сразу несколько vlan'ов. На каждый L2 вешаете по DHCP для удобства арендаторов (кто захочет, всё равно поставит свой роутер), шейпинг на основании входящего интерфейса.
    Не забудьте зарезать соединения между подсетями.

    Решение несколько странное, но если есть лишнее железо с сетевухами, но нет ни свичей с vlan'ами ни даже довольно скромного бюджета на покупку оных (если нужны только vlan - то это недорого даже за гигабитные железки) - то можете закупить пару копеечных железок и прошить openwrt. Тьфу, я же об имеющихся пк говорил. Поставить на пк какой-нибудь linux с openvswitch, будет хоть такой свич с vlan.
    Ответ написан
    1 комментарий
  • Как верно проектировать базу данных?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Если нужна таблица - должна быть таблица.

    Postgresql предоставляет шикарную возможность разделить базу данных на схемы. Есть пачка таблиц, описывающая какую-нибудь сущность? Перенесите их в отдельную схему и пусть не мешаются в public. Таблицы аггрегации? Выкиньте их в отдельную схему.
    Замечательно помогает, если становится многовато таблиц (несколько десятков разве много?).
    Правда, если вы любитель всякого орм, ваша библиотека может не уметь схемы.
    Ответ написан
    Комментировать
  • Объясните про MRR?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Вторичные индексы InnoDB, как известно, ссылаются на значение первичного ключа, а физически на дисках данные лежат рядом с первичным ключом и отсортированы по по этому самому первичному ключу. Значит, если в индексе написано, что вам нужны id 9, 6, 50, 8 и 7, выгоднее их читать с диска не в таком порядке, а пересортировать и прочитать двумя запросами: 6-9 и 50. Так получаем 2 запроса случайного чтения вместо 5. Это весьма полезно для HDD с медленной механикой, но ещё и приносит свои, хоть и более скромные, дивиденды для SSD - они хоть и на порядки быстрее HDD в случайном чтении, но и им тоже удобнее последовательное, а не случайное чтение.

    Вот MRR этим как раз и занимается. Сначала получает список необходимых ключей от индекса, сортирует этот список и запрашивает у диска не по одной записи в случайных местах, а более крупными последовательными блоками.
    Замечу, что MRR вступает в дело, если надо много чего прочитать с диска. Т.е. холодное чтение, данных для этой выборки по большей части нет в памяти. Разумеется, это далеко не быстрая штука.

    И ещё момент: у вас в запросе нет order by, но есть limit - это значит, что вам всё равно, какие именно строки выбрать. Mysql в таком случае будет возвращать любые подходящие строки в любом порядке на своё усмотрение.
    Ответ написан
    3 комментария
  • Как улучшить код аутентификации пользователя?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Спасибо, конечно, что не md5, но используйте нативный password_hash.
    Что за дичь идёт в следующих 5 строках после $stmt->execute?
    application/json в заголовке совершенно не вяжется с остальным кодом.
    Ответ написан
  • При запуске игр компьютер уходит в перезагрузку, в чем может быть причина?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Какой-то хренью на заявленные 370вт пытаться запитать GTX 970 (145вт по паспорту), FX-8320 (125вт по паспорту) и остальную мелочёвку?
    Рисковый вы человек.
    Ответ написан
    3 комментария
  • Какое железо для домашнего сервера?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Слежу на одноплатниками не очень пристально, но можете ограничиться одним требованием на 2 и более SATA и уже получить пустое множество. Больше 1 SATA на одноплатниках не видел.

    Под вменяемый NAS, а не подцепить к роутеру 1 внешний hdd на usb, классический путь пока актуален. Можно взять mITX + picoPSU какой-нибудь для экономии размеров.
    Ответ написан
    Комментировать
  • Как сделать сортировку SELECT FROM SELECT с последними состояниями устройств?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Ошибка в том, что так делать вообще нельзя. Даже этот странный mysql актуальный версий при дефолтном sql_mode откажется такое выполнять.

    Если порядок событий допустимо считать по старшинству id:
    select /**/ from `object_log`
        join (
            select max(id) as id 
                from `object_log`
                group by `id_gsm`
    ) lastevents using(id)
    ORDER BY `id_gsm` ASC
    Ответ написан
    Комментировать
  • Где хранит данные(пользователей, например) ejabberd2?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    нужно добавить пользователей

    ejabberdctl register <username> <domain> <password>


    Можно ли его заставить использовать mysql

    Сами гуглить не пробовали, видимо?
    https://docs.ejabberd.im/admin/guide/databases/mysql/

    Используемая по-умолчанию нативная база может быть расположена в разных местах. Например, в /var/lib/ejabberd/
    Ответ написан
    3 комментария
  • Как убрать запятую в конце массива?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Как насчёт формировать json не через одно место, а штатными функциями? json_encode
    Ответ написан
    Комментировать
  • Влияет ли директива "max connections" в mysql на работу нескольких сайтов расположенных на одном сервере?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    https://dev.mysql.com/doc/refman/5.7/en/too-many-c...
    If you get a Too many connections error when you try to connect to the mysqld server, this means that all available connections are in use by other clients.


    "Too many connections" является следствием превышения директивы max connections
    Количество сайтов, серверов или других клиентов базы с этим никак не связано. Хотя помогает быстрее в этот лимит упереться.
    Ответ написан
    2 комментария
  • Как функцию в php переименовать?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    А зачем вам вообще понадобился include_once? Да ещё так часто, что захотелось использовать невнятное имя функции?
    Во вьюхах once не используется, для загрузки классов - autoload, и затем, autoload composer'а вовсе исключили необходимость в написании include. Загрузка объявлений функций? Ну, ок, для функций автозагрузки действительно нет. Почему тога вы не можете использовать короткую функцию, которую привели в вопросе?
    Ответ написан
    2 комментария
  • Разница в индексах mysql?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Составной индекс должен быть именно age_country, а не наоборот.

    Как раз наоборот.

    mysql обычно использует подвид btree. У btree поиск левосторонний, т.е. по индексу age & country можно обрабатывать запросы по age. А по индексу country & age искать только age уже нельзя.

    И какова разница между индексом age_country и отдельно двумя индексами для age и для country?

    Вы ищете пользователей некоторой страны с возрастом от 25 лет.
    Перед вами справочники:
    0) пользователи отсортированы по возрасту (в пределах одного возраста - вперемешку) - вам достаточно пролистать до начала 25 лет, а дальше вчитываться в каждого пользователя и искать нужную страну. Справочник вам не поможет в этом. Индекс age
    1) пользователи отсортированы по стране. Вы быстро находите всех из нужной страны, а затем вчитываетесь в каждого пользователя и смотрите возраст. Индекс country
    2) пользователи отсортированы сначала по возрасту, в пределах одного возраста дополнительно отсортированы по стране. Быстренько листаете до 25 лет, в пределах каждого возраста листаете до нужной страны. Как-то не очень удобно? age & country
    3) пользователи отсортированы по стране, пользователи одной страны отсортированы вдобавок по возрасту. Быстренько листаете до нужной страны, быстренько пропускаете всех младше 25 лет - читаете остаток, поглядывая только, что страна не изменилась. country & age

    Какой справочник захотите использовать?
    А если я скажу, что в справочнике помимо сортировки других данных пользователя нет? И чтобы по индексу country уточнить возраст пользователя вам необходимо посмотреть id человека и сходить за остальными данными в картотеку?

    Вы можете взять справочник по стране, переписать все id людей, затем взять справочник по возрасту, и поискать в диапазоне от 25 лет записанные id людей. Потратите много сил на сравнение, не так ли? Вот и mysql умеет index intersect, но операция эта не бесплатная.
    Ответ написан
    Комментировать
  • Как сделать группировку по двум срезам?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    with vertex_cost as (
    select fid_id, sum(vertex_cost) as vertex_cost /*min, max аналогично*/ from vertex group by fid_id
    ),
    edge_cost as (
    select fid_id, sum(edge_cost) as edge_cost /*min, max*/ from edge group by fid_id
    )
    select id, name, vertex_cost, edge_cost
        from fig
        left join vertex_cost vc on fig.id=vc.fig_id
        left join edge_cost ec on fig.id=ec.fig_id

    Если у фигур косты есть всегда - то заменить left join на join. Сейчас фигура будет возвращена всегда, но с NULL.

    Если надо предварительно пофильтровать сами фигуры:
    with figures as (
    select id, name from figures where name like 'foo%'
    ),
    vertex_cost as (
    select fid_id, sum(vertex_cost) as vertex_cost /*min, max*/ from vertex where fig_id in (select id from figures) group by fid_id
    ),
    edge_cost as (
    select fid_id, sum(edge_cost) as edge_cost /*min, max*/ from edge where fig_id in (select id from figures) group by fid_id
    )
    select id, name, vertex_cost, edge_cost
        from figures
        left join vertex_cost vc on figures.id=vc.fig_id
        left join edge_cost ec on figures.id=ec.fig_id
    Ответ написан
    Комментировать
  • Как сравнить две даты?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    $str_date = "2001-01-01 15:20:20";
    $date1 = new \Datetime($str_date);
    $str_date = "2014-11-23 21:30:00";
    $date2 = new \Datetime($str_date);
    
    if ($date1>$date2) {
    //
    }
    Ответ написан
    2 комментария