Ответы пользователя по тегу MySQL
  • Как спроектировать БД для диалогов?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    LIKE - дико медленная операция, ее стоит использовать в исключительно редких случаях и то, для маленьких таблиц.

    Ваш вариант MANY_TO_MANY ниже - на порядки лучше.
    Ответ написан
    Комментировать
  • Почему не работает класс?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Вам посоветовали херню))

    Вопрос производительности при таких условиях решается с помощью кэширования. На подготовленых запросах вы ничего не сэкономите. Это примерно как прикладывать подорожник на открытый перелом ноги.
    Ответ написан
  • Что не так в этом коде?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    1 комментарий
  • Считается ли плохим тоном, наследование PDO в класс вспомогательной обертки?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Вообще говоря \PDO - это чужой вендроский код, вам на прямую неподвластный (разве что сырцы пыхи пилить будете), так что лучше все таки обертку, так как она будет гарантировать вам постоянство интерфейса работы с БД.
    С другой стороны, если выделаете что-то не большое - выбирайте по удобству, если удобнее и быстрее наследование - пусть будет так, если обертка - тогда обертка. Руководствуйтесь здравым смыслом.
    Посмотрите Doctrine на досуге
    Ответ написан
    Комментировать
  • Стоит ли подготовить все запросы в init?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Со всей силы не стоит. Базовая инициализация приложения не должна (по хорошему) иметь ничего общего с вашей бизнес логикой (БЛ). В вашем случае это грубое нарушение SOLID (SRP).
    Пример из серии "что-то пошло не так": ваш подготовленный запрос в процессе выполнения изменился, код его использующий будет ожидать старого поведения, но отвалится (это в лучшем случае) только после выполнения запроса, а там может быть что угодно. Как результат: поведение методов, использующих эти запросы меняется, без изменения их кода. Подобные ошибки ищутся долго.

    -- upd --

    Глобальные публичный переменные, как правило, это плохая идея)) Что вы будете делать, если у вас появится еще одно подключение к БД? Переписывать весь код?

    У вас функция Save делает select, зачем? Это ж явное противоречие названию

    Что касается подключения к БД - рекомендую вынести это в файл настроек, либо флаг запуска.
    Ответ написан
  • Как ускорить множество INSERT в Mysql?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Можно запихнуть все это дело в транзакцию, так индексы пересчитаются 1 раз.

    Правда я бы рекомендовал пакетную вставку в цыкле. В смысле набить запрос на N вставок одним insert, выполнить, далее еще раз наполнить и выполнить и т.д.
    Ответ написан
    Комментировать
  • Кто знает замену MongoDB?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    А если у каждого пользователя свои посты? Все посты пихать в одну коллекцию или в один массив?

    Почему же? Посты в одной коллекции - это вполне ок. Юзвери в другой коллекции это тоже ок.

    Если нужно реализовать что-то более менее нормальное, приходится писать костыль на костыле.

    Не пишите костыль на костыле, сначала спроектируйте БД так, что бы избежать этого.

    Вставлять документ в коллекцию можно только в конец.

    И в чем проблема (я вам по секрету: так происходит практически в каждой СУБД)? Какая вам разница, где оно будет вставляться? Делайте выборку с сортировкой.

    К примеру, вставляю пост в коллекцию, и мне нужно взять посты по дате добавления.

    RTFM

    написать костыль со skip, limit.

    Какой нехороший человек вам такую дичь сказал? Если у вас записей 10кк, у вас просто оперативки не хватит делать подобные выборки без skip/limit.

    Если бы можно было всё вставлять в начало коллекции, было бы намного проще.

    Вы пытаетесь вырвать гланды через анус, причем другого человека.

    Подскажите, пожалуйста, кто знает лучшую альтернативу.

    Еще раз, вы придумали проблему и пытаетесь ее героически решить, но проблема заключается в том, что вы не правильно используете средства предлагаемые mongo, и другая БД вам ни как не поможет
    Ответ написан
    1 комментарий
  • Как хранить результаты 1200 формул?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Почитайте сначала про реляционные СУБД, как они устроены.
    Конкретно под ваш случай:

    CREATE TABLE IF NOT EXISTS `formulaResult` (
      `formulaId` INT UNSIGNED NOT NULL AUTO_INCREMENT,
      `result`    TINYINT      NOT NULL,
      PRIMARY KEY (`formulaId`)
    )
      ENGINE = InnoDB;
    Ответ написан
    Комментировать
  • Установка и настройка lamp?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    1. Можно ли сделать такую структуру как на скрине выше?

    Можно, главное что бы в ней был для вас профит. Например нужены ли вам каталоги apache и php - сомневаюсь.

    2. Если в php файле есть ошибка, то страница попусту не откроется, как исправить данную проблему?

    Исправить ошибку в php файле, это же очевидно.

    3. Как обновить php до последней версии? В данный момент стоит 7.0.4, хочу поставить 7.0.6

    Смотрите в сторону сборок со сторонних ppa, например ppa:ondrej/php, или ждите, когда в официальном репозитории появится.
    Можете посмотреть в сторону перехода на CentOS у Remi сборки появляются очень оперативно.

    Под окружение для разработки очень рекомендую посмотреть в сторону Vagrant
    Ответ написан
  • Можно ли восстановить данные в MySQL?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    https://ru.wikipedia.org/wiki/E.164

    Восстановить не удастся, никак. То, что данные не валидируете перед работой с БД - печаль, будете умнее в следующий раз.
    Ответ написан
    Комментировать
  • Как загрузить сразу все изображения в одно поле в БД?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Вы пытаетесь отстрелить себе яйца, причем разрывными патронами((

    1. explode - для работы с "прогнозируемыми" строками вполне норм, у вас же файлы, могут быть вообще бинарные, например картинки. В случае попадания на delimiter посреди файла - получите кучу мусора. "explode" в смысле "взрыв" - это очень подходящее слово.

    2. В БД хранить файлы - не хорошо, вы будете ушатывать БД просто так. Самое интересное - как вы бэкапы планируете делать)) Объемы будут расти очень быстро.

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

    4. Отдача файлов, вот тут тоже веселье: допустим получив мега строку вы разделите ее на куски и вытащите таки свой заветный файл, потом будете отдавать его через echo, это будет на порядок дольше, чем через web сервер на прямую.

    5. Память на php: что будет, если ваша мега строка занимает 500мб? PHP с настройками по умолчанию сдохнет, даже не дочитав его.

    В общем: для хранения файлов используйте БД специально спроектированную для хранения файлов. Это файловая система. Если очень хочется шардирования для снижения нагрузки - можете посмотреть в сторону решений на базе mogilefs.
    В MySQL при этом стоит хранить только нужную дополнительную информацию о файле, например: путь, md5, некий идентификатор,...
    Сам файл лучше при сохранении приводить к такому виду:
    1. Берем md5 хэш от файла md5_file, допустим он у нас получился 01230000000000000000000000000000
    2. Перемещаем его в каталог: {UPLOAD_ROOT}/01/23/0000000000000000000000000000. Тут смысл в том, что при большом количестве файлов в одном каталоге будут проблемы с файловой системой по части производительности. В принципе можно оставить оригинальное расширение, тогда шаг 4 не нужен.
    3. В БД храним md5 хэш, путь к файлу и MIME-тип, можно еще и оригинальное имя.
    4. При запросе на вашу страницу - отдаем через x-accel-redirect, или x-sendfile
    Ответ написан
    2 комментария
  • Знак неравенства в mysql?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    IS NOT
    Ответ написан
    Комментировать
  • PHP, нормально ли на каждый запрос открывать коннект к MySQL, делать SELECT и закрывать коннект? Если нет, то как избежать?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Под чаты php - не лучший выбор, смотрите в сторону nodejs.
    Конкретно историю пишите в redis, а далее отдельным вызовом - в БД (если бизнес задачи этого требуют).
    Ушатывать БД только потому, что можете - это плохая идея.
    Ответ написан
  • Решение для базы данных с веб интерфейсом. Что посоветуете?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Если не заморачиваться на безопасности

    У вас нет такого права, примите за исходную. Пользователь всегда врет, это закон.

    Какую СУБД посоветуете(чтобы было проще с портированием и масштабированием данных) ?

    БД для портирования... хм... а зачем?
    На счет масштабирования - тут все завист от структуры ваших данных. Для данных в виде документов посмотрите в сторону mongodb, она из коробки умеет в шардирование. Для табличных - mysql/postgresql, тут масштабирование выбирается по тому, как используются данные: если в основном на чтение и редко на запись схема master-slave в помощь, иногда отдельные БД выносятся на отдельное железо.
    В случае
    Записей в таблицах может быть от сотен до сотен тысяч
    я очень сомневаюсь, что вам потребуется заморачиваться с масштабированием.

    Вы кстати не обратили внимание на очень важные метрики:
    - отказоустойчивость
    - сложность восстановления после сбоев

    Каким фреймворком посоветуете заинтересоваться?

    Зависит от задач, но как фреймворк общего направления рекомендую Symfony.

    есть ли какое либо другое решение простое в использовании но не менее эффективное и производительное?

    для базы данных с веб интерфейсом

    Вы задачу не озвучили, какое может быть решение?)) БД с web интерфейсом - это практически любой не статический сайт, только помимо этого там еще и бизнес логика присутствует.
    Ответ написан
  • Что скажете о моей реализации логирования?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Магические текстовки нужно заменить на константы.

    В итоге я могу хоть 800к логов загнать в бд без большой нагрузки на неё.

    Круть. За какой период времени? Какое железо? Нагрузка и на редис и на БД постоянная?

    Чем ваш логгер лучше https://github.com/Sirupsen/logrus ?

    -- --

    Посмотрел статью на хабре, увы там комментировать возможности не имею.

    Кровь из глаз((

    0. Посмотрите logrus и переименуйте статью на "еще один логгер". Ваш логгер не гибкий, примите за исходную.

    1.
    Данные в редисе

    вы правда думаете кто-то будет это читать?))

    2.
    Я долго бился голов об клавиатуру искал багу в коде...

    верно ошибка не в коде, такого просто делать нельзя. Нужно понимать как работает redis и что происходит при записи/обновлении данных.

    3.
    1 000 000 записей в мускуль добавилось за 25мл.сек

    Что-то слабо верится(( Сколько выполняется запись просто из файла, такого же объема данных. Интересует сравнение времени.

    4.
    правда в редис эти данные писались около 6 минут

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

    5.
    конфиг

    Кровь из глаз, конфиги если уже json делаете - хотя бы делайте человеко понятными, не используйте массивы там, где должны быть объекты!!!

    6.
    библиотека

    То, что вы делаете в init - это как минимум богомерзко((( Ваш логгер абсолютно не управляем. Его настройка приколочена 100-тыми говздями и заварена арматурой, как у вас вообще возникла мысль говорить о гибкости?))

    7.
    //Путь к файлу с конфигами
    config_file string = "/home/v-smerti/localhost/api/src/microService/config/log.json"

    1440x900_484850_%5Bwww.ArtFile.ru%5D.jpg

    8.
    демон

    Вы хоть сами смотрели?))

    9. Вы нигде не обрабатываете ошибку отправки почты, это вообще как? Если связь с сервером нарушено - логов не будет?))

    10. SQL:
    `id` int(11) NOT NULL AUTO_INCREMENT,
    Я надеюсь вы осмысленно допускаете отрицательные id.

    11. SQL:
    `type` text NOT NULL,
    эт пи*дец.

    12. SQL:
    KEY `type` (`type`(191))
    Если не секрет - почему не 192?
    Ответ написан
    1 комментарий
  • Есть ли простое web приложение для регистрации документов?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    owncloud
    Ответ написан
    Комментировать
  • PHP и MySql. Куда идем?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Со временем любая технология устареет, это факт. Но PHP с MySQL сейчас бодры и полны сил, выйдет PHP7 - первый будет еще и с допингом)).

    в скором времени вообще будут "удалены"

    Откуда удалены, если не секрет?
    Ответ написан
  • Как "объединить" записи в таблицах в одну строку?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Читайте на тему: Строковые функции MySQL
    Ответ написан
    Комментировать