Не бизнес-логика в СУБД, а корректное описание типов в СУБД.
Корректность и консистентность данных — это как беременность, либо она есть, либо её нет.
Если не описывать «что такое консистентные данные» на уровне схемы базы, то вам придётся описывать это на уровне приложения, и в каждой точке где вы загружаете что-то из базы делать проверки.
Вы правда хотите проверять всё-всё вручную? Конечно, есть ситуации, когда проще проверять в приложении — например, когда нужно проверить статус чего-либо во внешней системе, но 99% проверок можно унести на уровень СУБД и рассматривать это как простой и гибкий валидатор ваших данных (и, к тому же, очень быстрый)
То, что весь код заточен на сложившуюся архитектуру.
Начинать переделывать этот аспект — придётся много чего трогать, а там уже тоже проблем накопилсь, и не факт, что они менее важны, чем описываемые мною.
> (Ещё хотел бы добавить, что если вы вдруг будете делать что-то с внутренностями mysql и попытаетесь искать помощи в mailing list, то во-первых подтверждения я ждал больше суток, а во-вторых, когда меня туда включили, мой вопрос всё равно проигнорировали. Ну то есть даже никакого «go away, you moron» не было, вообще ничего)
Да, изучать внутренности может получится лишь двумя способами
1) Пообщаться с человеком, что занимается разработкой
2) Читать сорцы.
К слову, я достаточно хорошо знаком с исходным кодом replication, могу помочь, если что.
Когда вы вызываете mysql_query(), вы зовёте код, который зовёт внешние (относительно MySQL) storage engine.
unique row count добавить в API просто
Починить NULL'ы — это архитектурная переделка оптимизатора и индексов во всех storage engine.
Я в посте недостаточно правильно выразился.
Проблема не только в API как таковом, но и в том, как под него заточен оптимизатор и engines.
> Как я понял, речь о внутренних интерфейсах. Если синтаксис останется прежним, то подавляющее большинство юзеров (админов и разработчиков) ничего не заметят
Неверно. Сломанный Storage Engine API == переделка всех storage engine.
Многой информации там просто нету.
Например, Merge Engine — я вижу проблемы в реализации новых функций.
С другими тоже непросто — те же индексы в InnoDB придётся _существенно_ переделывать.
В общем, там кругами по воде будет расходиться.
> Весьма спорно. Даже если синтаксис запросов и/или внешних API изменится незначительно. Инерция очень велика.
Я давно не общался с разработчиками MariaDB, но если кто и перепишет оптимизатор — так это они.
Но это будет уже не совсем MySQL.
Про проблемы эти они знают.
Корректность и консистентность данных — это как беременность, либо она есть, либо её нет.
Если не описывать «что такое консистентные данные» на уровне схемы базы, то вам придётся описывать это на уровне приложения, и в каждой точке где вы загружаете что-то из базы делать проверки.
Вы правда хотите проверять всё-всё вручную? Конечно, есть ситуации, когда проще проверять в приложении — например, когда нужно проверить статус чего-либо во внешней системе, но 99% проверок можно унести на уровень СУБД и рассматривать это как простой и гибкий валидатор ваших данных (и, к тому же, очень быстрый)
--binlog-ignore-db
Для фильтрации таблиц — сделайте промежуточный mysql-slave, в нём поставьте опции
--replicate-ignore-table
и уже со slave высасывайте libslave обновления
Разберусь с dnsmasq, напишу второй пост — как тоже самое делается через dnsmasq
Но как он поможет на моём ноутбуке?
Опишите конфиг/настройку для моего случая
Нету такой функции в API, чтобы unique cardinality узнать
> Если это в самом деле так, откройте bug report, пожалуйста.
Файл storage/innobase/handler/ha_innodb.c
Первый раз про неё слышу, потому ничего не могу сказать.
То, что весь код заточен на сложившуюся архитектуру.
Начинать переделывать этот аспект — придётся много чего трогать, а там уже тоже проблем накопилсь, и не факт, что они менее важны, чем описываемые мною.
> (Ещё хотел бы добавить, что если вы вдруг будете делать что-то с внутренностями mysql и попытаетесь искать помощи в mailing list, то во-первых подтверждения я ждал больше суток, а во-вторых, когда меня туда включили, мой вопрос всё равно проигнорировали. Ну то есть даже никакого «go away, you moron» не было, вообще ничего)
Да, изучать внутренности может получится лишь двумя способами
1) Пообщаться с человеком, что занимается разработкой
2) Читать сорцы.
К слову, я достаточно хорошо знаком с исходным кодом replication, могу помочь, если что.
А как вы определяете, какие сторонние, какие нет?
Вот XtraDB — сторонний?
unique row count добавить в API просто
Починить NULL'ы — это архитектурная переделка оптимизатора и индексов во всех storage engine.
Я в посте недостаточно правильно выразился.
Проблема не только в API как таковом, но и в том, как под него заточен оптимизатор и engines.
Не смотрел, но не думаю, что они решали проблемы описанные в посте.
У них другие цели.
Или подзапросы не используются?
Неверно. Сломанный Storage Engine API == переделка всех storage engine.
Многой информации там просто нету.
Например, Merge Engine — я вижу проблемы в реализации новых функций.
С другими тоже непросто — те же индексы в InnoDB придётся _существенно_ переделывать.
В общем, там кругами по воде будет расходиться.
> Весьма спорно. Даже если синтаксис запросов и/или внешних API изменится незначительно. Инерция очень велика.
Storage Engine API — внешнее.
Но это будет уже не совсем MySQL.
Про проблемы эти они знают.