ФорумРазработкаУстановка и администрирование ПОСерверы баз данных → Почему не нужно использовать MySQL

Почему не нужно использовать MySQL

  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 14 марта 2015 г. 1:28

    Кратко: потому что говно.

    Подробнее: в mysql есть типы таблиц myisam и innodb. Вторые поддерживают внешние ключи, а первые нет. При этом при переносе базы в новую СУБД или просто при выполнении миграции вместо innodb могут быть созданы таблицы myisam, просто потому что глобальный конфиг mysql чуть иначе настроен. В результате таблицы восстановятся, но без ключей, причём тихо, без сообщений об ошибках.

    Или вот кейс: портировал старую базу на новый сервер - не создалась одна таблица. Просто не восстановилась из дампа по каким-то своим соображениям. И тоже это обнаружилось на третий день, когда логика приложения отъехала.

    В общем, работая с mysql быть уверенным в целостности данных нельзя.

    не всё полезно, что в swap полезло
  • Ivan.

    Сообщения: 495 Репутация: N Группа: Адекваты

    Spritz 14 марта 2015 г. 1:59, спустя 31 минуту 47 секунд

    Вот че за тема у тебя а? Вообще хрень какая-то

  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 14 марта 2015 г. 2:08, спустя 8 минут 22 секунды

    MySQL хуже конечно чем Postres, если смотреть сугубо как на РСУБД, но то что описано в первом посте это мелочи

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 14 марта 2015 г. 2:14, спустя 5 минут 48 секунд

    @adw0rd, типа есть более серьёзные косяки? =)

    CREATE TABLE (
    ...
    ) ENGINE=INNODB

    Вот такой один и тот же код миграций создаёт на девелоперской тачке innodb-таблицы, а на продакшн-сервере - myisam. Причём никаких сообщений об ошибках.

    не всё полезно, что в swap полезло
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 14 марта 2015 г. 2:15, спустя 1 минуту 20 секунд

    Мы как-то ходили в офис оракла с @md5, @mathete и вроде @Troy там был. Так вот, там соавтор Mysql рассказывал почему у них все так плохо MySQL: проблемы, решения и последствия / Мастерская интернет-разработчика [adw0rd.com]

    Спустя 97 сек.

    @master, ты сейчас как админ говоришь, а девелопер скажет что это фигня, т.к. он пользуется с другой стороны

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 14 марта 2015 г. 2:24, спустя 9 минут 5 секунд

    ты сейчас как админ говоришь, а девелопер скажет что это фигня, т.к. он пользуется с другой стороны

    Я как девелопер говорю. Ситуация как с пхп: один и тот же код может работать по-разному из-за разных глобальных настроек (php.ini, my.cnf). В результате требуется больше времени на тестирование.

    не всё полезно, что в swap полезло
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 14 марта 2015 г. 2:39, спустя 14 минут 23 секунды

    Причём ладно бы просто по-разному, но с выдачей ошибок. Так ведь и ошибки не выдаёт.
    Программирование предполагает, что я отдаю команду машине, она выполняет. Одинаковые команды -> одинаковый результат. И именно предсказуемость и воспроизводимость результата дают контроль над инфраструктурой. А непредсказуемый результат сводит на нет все результаты.

    не всё полезно, что в swap полезло
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 14 марта 2015 г. 11:28, спустя 8 часов 49 минут 50 секунд

    Согласен что подавление ошибок - моветон

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 14 марта 2015 г. 11:36, спустя 7 минут 19 секунд

    Может виноват инструмент, которым ты делаешь _миграции_, а не MySQL? Кто кушает фразу "engine"?
    В других СУБД тоже есть глобальные настройки которые могут отличаться на разных серверах. Топик ниочем.

    Хотя лично меня раздражает ANSI MODE.

    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 14 марта 2015 г. 12:06, спустя 30 минут 30 секунд

    а я ваще нихуя не понял. ктото обосрался, а виновата ванная потому что срали в нее, а не в унитаз.

    Сапожник без сапог
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 14 марта 2015 г. 12:57, спустя 50 минут 23 секунды

    я не верю, что не было никаких ошибок

    все умрут, а я изумруд
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 14 марта 2015 г. 16:34, спустя 3 часа 37 минут 41 секунду

    а я ваще нихуя не понял. ктото обосрался, а виновата ванная потому что срали в нее, а не в унитаз.

    @phpdude,
    1. одинаковые миграции на локалхосте и продакшне, по итогам разные схемы. на продакшне отсутствуют внешние ключи.
    2. переносил на новый сервер 15 баз. спустя три дня случайно обнаружил, что в одной базе не восстановилась одна таблица. вопрос: сколько таблиц не восстановилось в других базах? что ещё не восстановилось?

    не всё полезно, что в swap полезло
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 14 марта 2015 г. 16:53, спустя 18 минут 15 секунд

    а чем бекапили/восстанавливали? mysqldump+musql < ololo.sql?

  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 14 марта 2015 г. 17:06, спустя 13 минут 3 секунды

    я не верю, что не было никаких ошибок

    @md5, смотри фокус:

    
    drop table if exists `t2`;
    drop table if exists `t1`;
    
    create table `t1` (
        `id` int auto_increment,
        primary key(`id`)
    ) engine = innodb;
    
    create table `t2` (
        `id` int auto_increment,
        `t1_id` int,
        primary key (`id`),
        foreign key (`t1_id`) references `t1`(`id`)
    ) engine = innodb;
    

    как и ожидается, создаст две таблицы и между ними внешний ключ t2.t1_id -> t1.id

    теперь меняем движок на myisam, в котором, как известно, внешние ключи не поддерживаются:

    
    drop table if exists `t2`;
    drop table if exists `t1`;
    
    create table `t1` (
        `id` int auto_increment,
        primary key(`id`)
    ) engine = myisam;
    
    create table `t2` (
        `id` int auto_increment,
        `t1_id` int,
        primary key (`id`),
        foreign key (`t1_id`) references `t1`(`id`)
    ) engine = myisam;
    

    или так

    
    create table `t1` (
        `id` int auto_increment,
        primary key(`id`)
    ) engine = myisam;
    
    create table `t2` (
        `id` int auto_increment,
        `t1_id` int,
        primary key (`id`)
    ) engine = myisam;
    
    alter table `t2` add foreign key (`t1_id`) references `t1`(`id`);
    

    Создадутся две таблицы БЕЗ ключа и БЕЗ ошибок.

    а теперь самая мякотка, без указания движка:

    
    create table `t1` (
        `id` int auto_increment,
        primary key(`id`)
    );
    
    create table `t2` (
        `id` int auto_increment,
        `t1_id` int,
        primary key (`id`),
        foreign key (`t1_id`) references `t1`(`id`)
    );
    

    И мы получаем неизвестный результат без ошибок.

    А неизвестный потому что тип таблиц будет зависеть от default_storage_engine в my.cnf

    Спустя 95 сек.

    а чем бекапили/восстанавливали? mysqldump+musql < ololo.sql?

    @Абырвалг, да, mysqldump + mysql source ololo.sql

    не всё полезно, что в swap полезло
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 14 марта 2015 г. 18:17, спустя 1 час 11 минут 42 секунды

    Да ну, фигня. Ну если не указан явно движок таблиц, то чего ждать? Указывай ...
    Лучше бы, конечно, было, чтобы ругался если движок не поддерживает fk, а он есть. Не спорю. Но эта фича еще не повод прям гавном обзывать сразу.

    Спустя 118 сек.

    Вот то что ты пишешь сообщение с новой строки, а оно приклеивается, если нет двух пробелов - вот это гавно ))))

Пожалуйста, авторизуйтесь, чтобы написать комментарий!