Ответы пользователя по тегу MySQL
  • Существуют ли фреймворки для формирования статистики данных в БД?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    допустим идет процесс регистраций - на мероприятии.. стремительный.

    мероприятие зарегистрировалось 15 человек из 10 городов 5 стран мира из них 19 студентов :)

    "стремительный" - это 2-3 / сек

    А еще выгружалось в эксель да в ворд для особо продвинутых..

    Тебе это не нужно))

    а вдруг уже что-то изобрели?) а то встряну как с таблицами...

    Джойны + индексы + временные таблицы изобрели))

    проще выполнить динамичную подгрузку через ajax с интервалом... или это все будет визуально заметно?

    Вы путает real-time backend, систему отчетов (как правило длительная) и frontend.

    -------

    По статистике - посмотрите Piwik
    Ответ написан
  • Как сделать сортировку большой базы данных?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Если на фильтруемое поле (Rating) не указали индекс - лучше вообще откажитесь от задачи))
    Ответ написан
    1 комментарий
  • Как задать запрос к MYSQL, с учетом нескольких полей в разных таблицах?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    1. Лучше явно прописывайте {JOIN_TYPE} JOIN
    2. Не используйте сокращения типа "b" Никогда. В один прекрасный момент попадете на запрос с join таблицы самой себя и полей эдак на 20 штук, помянете мое слово))
    3. Лучше не пишите select *, пишите явно, что хотите получить.

    SELECT books.id,
        books.name AS book_name,
        GROUP_CONCAT(genres.name) AS genres
    FROM books_has_genres
        INNER JOIN books ON books_has_genres.book_id = books.id
        INNER JOIN genres ON books_has_genres.genre_id = genres.id
    WHERE books_has_genres.genre_id = 25
          AND books_has_genres.book_id NOT IN (
              SELECT sub_books_has_genres.book_id
                  FROM books_has_genres AS sub_books_has_genres
                  WHERE sub_books_has_genres.genre_id = 22
          )
    GROUP BY books_has_genres.book_id
    ORDER BY books.id
    Ответ написан
    Комментировать
  • Как узнать об успешности выполнения sql запроса на golang?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    RTFM

    https://github.com/go-sql-driver/mysql/wiki/Examples:

    _, err = stmtIns.Exec(i, (i * i)) // Insert tuples (i, i^2)
    if err != nil {
        panic(err.Error()) // proper error handling instead of panic in your app
    }
    Ответ написан
    Комментировать
  • В каком виде сделать CMS для конкретного сайта?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Задача: прикрутить к нему любую CMS.

    Вы не с той стороны едите шоколадный рогалик))
    Не к сайту прикручивается CMS, а сайт реализовывается на базе CMS))

    под подобное вполне подойдет MODx
    Ответ написан
    Комментировать
  • А как бы вы сформировали многомерный массив из запроса к бд?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Открой для себя доктрину, посмотри как там реализовано.
    Ответ написан
    Комментировать
  • Как безопасно открыть доступ к MySql для разработчиков?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    но им я не могу дать необходимые логин/пароль для подключения к mysql через ssh, всё таки это уже и доступ к серверу

    Мне жаль вас расстраивать, но MySQL работает по собственному протоколу, который не базируется на ssh.
    Все, что вам нужно - дать девам хост, логин, пароль к MySQL. Мускул должен быть виден из вне.
    Ответ написан
  • Какой MySQL Manager вы используете?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    PhpMyAdmin, mysql-client
    Ответ написан
    Комментировать
  • Как восстановить сайт, разработанный на Joomle, имея только файловый бекап сайта?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Как оживить труп? Руки, ноги, голова - вполне работоспособные, туловища правда нет...
    Ответ написан
    Комментировать
  • Как спроектировать базу данных сайта знакомств на MySQL?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    1. ENUM вообще говоря довольно большая штука 65535 вариантов. Но все же рекомендую делать через нормализацию, вам это словарь может еще пригодится где-то.
    2. Ключами стоит делать то, по чем вы будете искать. В случае, если данные в конце слабо отличаются, а основные изменения в начале - имеет смысл ограничить индекс по размеру (ВНИМАНИЕ ТОЛЬКО ДЛЯ ЭКОНОМИИ ПАМЯТИ). Например:
    abcd
    bacd
    dxdc
    aabd
    У приведенных строк на последнем символе разница не существенная, посему индекс можно ограничить 3-мя.
    3. Вот тут бабка на двое гадала, если у вас будет индекс на уникальность (НЕ primary), то множество NULL вы получить сможете, а вот множество "" - нет. NOT NULL рекомендую использовать в случае, если вы требуете обязательности заполнения данных.
    4. Конечно MEMORY! Всего один сбой в ДЦ и у вас появится работы на еще пол года, это же замечательно)) В памяти можно хранить только то, что вы согласны в любой момент потерять.
    Если по хорошему - memory таблицы во первых имеют кучу ограничений, во вторых - проигрывают k-v хранилищам типа memcached/redis по скорости, в третьих не поддерживают вытеснения.

    PS: планируется высокое посещение сайта (десятки тысяч пользователей).

    За какой период?
    Если за сутки - это... не высокое посещение, вы даже foreign ключики позволить себе сможете.
    Если за минуту (и реально много данных) - вот это уже интересно, про FK забудьте, пересчет индексов будет слишком дорогим. Под поиск - смотрите в сторону кластера на elasticsearch, так же скорее всего потребуется кластер мемкэшей. БД дергать можно будет но по минимуму. Основная работа должна будет происходить в фоновом режиме, посему подберите сервер очередей типа rabbitmq, или что-то типа того.
    Ответ написан
    Комментировать
  • InnoDB. Как правильно сделать бэкап?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Для огромных таблиц можно пойти по 4 путям:
    1. Остановка записи и бэкап через mysqldump
    2. Остановка записи и бэкап через копирование файлов (ibdata должен быть настроен под каждую таблицу)
    3. Создание новой таблицы для записи И переключение на нее, а бэкапить старую в фоновом режиме
    4. Создание новой таблицы для бэкапа и в фоновом режиме копирование данных в нее, а далее уже бэкап, либо файловый, либо mysqldump
    Ответ написан
    Комментировать
  • Как лучше хранить остатки товаров?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Зачем вам это в бэкенде? Вы в любом случае полностью зависите от пользовательской куки. Если человек зайдет с другого браузера вы его отличить не сможете.

    Добавлять данные имеет смысл только для авторизированных пользователей и жестко связывать с userId. В противном случае - корзина это полностью фронтенд задача, бэкенд же оперирует номенклатурой товаров.

    Товар лучше сделайте чем-то "не делимым", остальное - это уже группы товаров.
    Ответ написан
  • Как собрать все миграции в одну?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Миграция - это итерация изменения БД, с возможностью отката в случае ошибок. Поднимать вопрос об объединении миграций в одну имеет смысл только в случае, если это приводит к неприятным последствиям, например: поднятие dev окружение - больше часа выполняет UP БД, или в случае отката будут уничтожены данные (хотя за такую миграцию разработчику швабру кое куда засунуть надо), или еще чего. Просто "много файлов миграций" - это НЕ причина.

    Вообще говоря можно сделать следующее: выполнить dump БД, а дальше создать отдельную миграцию, которая будет только выполнять этот dump.
    Ответ написан
    Комментировать
  • Реализация ЧПУ путем хранения связи "url"-"query" в базе данных. Ваши мнения?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Если это slug - в бд имеет смысл хранить, но обязательно кэшировать, как вариант - напрямую nginx-ом из memcached отдавать. Но это при условии, что у вас как минимум n-уровневый урл. Т.е. если в вашем примере
    `site.com/notebook-lenovob550-da02ua` выделенное - это контроллер NotebookController - тогда ок. Дело в том, что разбор ЧПУ - это часть работы любого запроса и если у вас он будет медленный - полярный лис уже подкрался и ждет))
    Ответ написан
    Комментировать
  • Как лучше всего реализовать мультиязычность?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    1. Просто php файлы:
    + С ними, таки да, просто работать
    - В случае, когда переводов реально много - будете вызалить по памяти
    - Правки обязан вносить прогер

    2. PO -> MO файлы:
    + Есть куча тулзовин для работы с ними
    + Работает с php довольно таки быстро и памяти кушает не так много
    - Обязательная перегенирация MO
    - В случае, если переводы делает 3-е лицо, мерджить бывает - не самое приятное занятие

    3. БД:
    + Переводы может делать вообще левый человек, не вторгаясь в процесс
    - Повышенные требования к миграциям
    - Обязательное разделение на части и кэширование

    З.Ы. Оригинальный язык для переводов НЕ рекомендую делать нейтивным. Лучше использовать специфические строки в стиле: '{moduleName}:{controllerName}:{actionName}:{blockName}:frase'. В противном случае есть вероятность склейки переводов и может возникнуть ситуация:

    В блоке удаления заменили текстовку "ОК" на "Удалить", и магически не постижимым образом на странице регистрации под формой ввода появится одноименная клавиша.
    Ответ написан
    1 комментарий
  • Как правильно вставить данные в MySQL c помощью php?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    if (isset($_POST['name']) && isset($_POST['email'])){
    
    // ГДЕ ВАЛИДАЦИЯ ВХОДЯЩИХ ДАННЫХ???
    
                $userName = $_POST['name'];
                $email = $_POST['email'];
                $company = $_POST['company'];
    
    // 2015-ый на дворе, PSR-4!!!
    
                include '../template/sql-connect.php';
    
    // mysql_conneсt - устарел, го ОЧЕНЬ не рекомендуется использовать
    
                $db_server = mysql_connect($db_hostname, $db_username, $db_password);
    
    // Use PSR-2 Luke!
    // die - используй только в случае крайней необходимости во время дебага, в остальных ситуациях - это как правило хрень постная.
    // Если уже пишешь ошибку - пиши конкретно, что не так "Query error" это примерно тоже самое, что и "oops.."
    
                if(!$db_server) { die("Query error"); }
    
    // Возьму ка я и отправлю в $POST['company'] = "'); DROP TABLE users;"
    // И баляля будет
    // Входящие данные обязательно должны быть И провалидированы И экранированы.
    
              $query = "INSERT INTO users (name, email, company) VALUES" .
                     "('$userName', '$email', '$company')";
    
               if (!mysql_query($query, $db_server))
                     echo "INSERT failed: $query<br>" .
                     mysql_error() . "<br><br>";
    
                mysql_close($db_server);
            }


    Ну и общее: следует разделять вывод данных и бизнес логику приложения, почитайте про MVC
    Ответ написан
    6 комментариев
  • Производительность сайта по сдаче тестирования?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Смотря на какую нагрузку вы рассчитываете. Для ~0,5 rps вам кэш даже может не понадобится.
    redis - чаще всего используется как кэш хранилище, и pub/sub. Как БД его использовать - не самая лучшая идея, хотя бы потому что:
    redis.io/commands/keys
    Warning: consider KEYS as a command that should only be used in production environments with extreme care. It may ruin performance when it is executed against large databases.
    Ответ написан
    3 комментария
  • Как лучше сделать MySQL базу данных типа account - key - value?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Если это не критичные данные и при их потере ничего не произойдет - смотрите в сторону redis.
    Если значений не много - просто сериализируйте (правда фильтрация качественная пропадет).
    Если значений прям таки дохрена + индекс на key - [id, key, value].
    Ответ написан
    Комментировать