Инициативная группа MySQL AB Maria, состоящая из шести человек и возглавляемая Michael «Monty» Widenius (создатель MySQL и MyISAM), выпустила тестовую версию нового движка хранения данных Maria.

Движок Maria — это расширенная версия MyISAM, которая поддерживает весь основной функционал MyISAM и в дополнение к этому предлагает: поддержку восстановления данных после сбоев (data auto-recovery, crash safe), полное логирование (включая операции CREATE, DROP, RENAME и TRUNCATE) и новый формат строк PAGE.
Планируется, что движок Maria будет входить в стандартный пакет в версиях MySQL 6.X

Основные замечания касательно сравнения Maria и MyISAM

Преимущества перед MyISAM
  • Восстановление данных и индексов после сбоев
  • Откат, после сбоя, в предыдущее состояние или к состоянию после последней команды LOCK TABLES
  • Полное логирование операций, включая: CREATE/DROP/RENAME/TRUNCATE TABLES, LOAD DATA INFILE, SELECT… INSERT и INSERT (множество строк), ALTER TABLE
  • LOAD INDEX может пропускать неиспользуемые индексные блоки
  • Новый блочный формат строк, в котором данные хранятся ввиде страниц
  • При использовании блочного формата строк (выбираемого теперь по умолчанию) строковые данные могут кешироваться
  • Блочные тесты большинства элементов
  • Поддержка как отказоустойчивых (crash safe, транзакциональных) так и нетранзакциональных таблиц. (Нетранзакцональные таблицы не логируются и для строк используется меньше места): CREATE TABLE foo (...) TRANSACTIONAL=0|1
  • PAGE используется только для отказоустойчивого/транзакционального строкового формата
  • PAGE формат должен дать заметное увеличение скорости на системах с плохим кешированием данных. (К примеру Windows)

Отличия от MyISAM
  • Использование больших (1GB по умолчанию) лог файлов
  • Использование контроля за логами (maria_log_control) и файлов логов (maria_log.???????). Файлы логов могут быть очищены автоматически, когда они уже больше не нужны, или по требованию (после бакапирования).
  • По умолчанию используются 8К страницы (MyISAM использует 1К). Maria будет работать быстрее на индексах с фиксированным размером, но медленнее на ключах с переменной длиной.

Устранение недостатков на ближайшее время
  • В Maria 1.0 может быть один пишущий и много читающих (MyISAM может иметь одного добавляющего и много читающих, когда используются конкурирующие добавления записей).
  • Не поддерживается INSERT DELAYED
  • Не поддерживается кеширование составных ключей

Устранение недостатков в следующих релизах
  • Хранение очень малых строк
  • Не поддерживаются MERGE таблицы

Различия, которые вероятно не будут устранены
  • Страницы данных в блоковом формате увеличивают размеры: 10 байт на страницу и 5 байт на строки. Транзакции и поддержка конкурирующих записей приведут к увеличению: 7 байт на новые строки, 14 байт для удаленных строк
  • Отсутствие внешнего блокирования (MyISAM имеет внешнее блокирование, но оно редко используется)
  • Использование одинакового размера страниц для индекса и данных. MyISAM поддерживает различные размеры страниц для индексов
  • Индексный номер требует один экстра байт на индексную страницу
  • Не поддерживается внутренний MySQL RAID (выключен и в MyISAM)
  • Минимальный размер файла данных формата PAGE 16К (со страницей на 8K)

Via: handynotes.ru

Комментарии (63)


  1. anonymous
    29.01.2008 06:09


    1. unnamed777
      29.01.2008 06:09

      Да, не помешало бы. Надоели траблы с "И" и "ш"


      1. denuka Автор
        29.01.2008 06:09

      1. Spec
        29.01.2008 06:09

        Вы меня прям смутили. :)
        Все свои проекты перевел на UTF-8 уже 4 месяца назад и никаких глюков не заметил (по крайнер мере юзвери не писали в саппорт)

        Может уточнить, где конкретно траблы?


        1. unnamed777
          29.01.2008 06:09

          Ну смотря как как переводить. У меня некоторые(вап-сайты) работают через энное место - кодировка полей cp1251, кодировка клиента и сервера тоже, но данные пишутся и читаются в утф8. Никаких проблем(кроме чтения базы через тот же sqlyog). Где конкретно траблы сейчас уже не скажу, но мучал долго и по-всякому.
          Вот, кстати, наглядное проявление подобной проблемы - http://habrahabr.ru/blog/i_am_clever/347… (комментарии)


          1. Cougar
            29.01.2008 06:09

            Вот гарантированное спасение:

            Сразу после mysql_connect() надо выполнить такие вот запросы:

            SET NAMES utf8;
            SET character_set_client=utf8;
            SET character_set_connection=utf8;
            SET character_set_database=utf8;
            SET character_set_results=utf8;

            Разумеется, кодировки БД, таблиц и полей очень не мешало бы привести к UTF-8 :)
            А если база в cp1251 (она же win1251, она же windows-1251) - то скрипт, который сконвертит дамп БД в UTF8, пишется секунд за 30 :)

            PS: Да, знаю, что эта пачка SQL-запросов избыточна - но во-первых, эти запросы выполняются за исчезающе малое время. И во-вторых - никаких посторонних косяков они не генерируют :)


          1. CAJAX
            29.01.2008 06:09

            Вообще WAP сайту сам бог велел быть только в UTF-8. На мобильных телефонах как правило нет возможности выбора кодировки, от чего страница в cp1251 становится абсолютно нечитаема на нелокализованых телефонах.
            Проверено на апаратах во Франции и паре китайских "игрушек".
            Кстати, на w3.org есть строчка о кодировках в WAPе.


            1. unnamed777
              29.01.2008 06:09

              А кто сказал, что они у меня не в утф? Я в вапе уже года три, если не больше, и прекрасно это знаю;-)


              1. CAJAX
                29.01.2008 06:09

                Нет нет, что вы, это я понял это ещё из первых строк, "..но данные пишутся и читаются в утф8..". Просто согласился с Вами :)


        1. noise
          29.01.2008 06:09

          тогда по какому поводу возмущения?


        1. vladon
          29.01.2008 06:09

          тогда откуда эти возгласы о некорректной работе с utf-8?

          Википедия использует utf-8, и там с русскими буквами всё нормально


  1. anonymous
    29.01.2008 06:09


    1. proxor
      29.01.2008 06:09

      Вы сперва мануалы почитайте и сервер запустите с UTF-8.


  1. anonymous
    29.01.2008 06:09


  1. anonymous
    29.01.2008 06:09


    1. vladon
      29.01.2008 06:09

      всё там с utf-8 нормально.

      по-вашему, какую БД использует Википедия?


  1. anonymous
    29.01.2008 06:09


    1. Maximark
      29.01.2008 06:09

      Нахрена... чем простой UTF8_GENERAL не нравиться, всё прекрасно работает с кирилицей, забудьте просто про кодировку win-1251 в html и всё! это аттавизм...


  1. norguhtar
    29.01.2008 06:09

    Поддержки транзакций опять нет. Когда она уже будет?


    1. grischa
      29.01.2008 06:09

      используйте ИнноДБ


      1. norguhtar
        29.01.2008 06:09

        Использую. Но у него свои косяки присутствуют.


        1. grischa
          29.01.2008 06:09

          Например? Я уже лет 5 на ИнноДБ сижу. Никаких проблем не наблюдал.


          1. norguhtar
            29.01.2008 06:09

            При сбое сложно востановить базу (практически не возможно). Перенос в отличии от того же MyISAM только через dump/restore. По умолчанию валит все данные в один файл.


            1. WanderingStar
              29.01.2008 06:09

              Разные файлы - конфиг вам в руки. А по восстановлению соглашусь - кошмар просто.


              1. norguhtar
                29.01.2008 06:09

                Дык поставил. Но опять же не спасает в случае повреждения файла с метаданными. Но у меня есть нездоровое подозрение, что в коммерческой версии все хорошо :]


            1. abstractioneer
              29.01.2008 06:09

              innodb-tools
              не пробовали?


              1. norguhtar
                29.01.2008 06:09

                Да как-то руки не дошли. Сами то пробовали?


                1. abstractioneer
                  29.01.2008 06:09

                  не пробовал, потому и интересуюсь - судя по описанию, вещь многообещающая, а времени все никак нет добраться:)


    1. pipboy
      29.01.2008 06:09

      Поддержка транзакций обещается в следующем релизе
      см. FAQ: http://monty-says.blogspot.com/2008/01/maria-engine-is-released.html


    1. erock
      29.01.2008 06:09

      поддержки транзакций в MyISAM нет намеренно.
      Не так много реальных задач в веб-программировании, где действительно нужны транзакции и ACID. А механизм транзакций - это гарантированное замедление работы бд.
      Поэтому всем, кому они нужны - InnoDB и новомодный Falkon в руки.


      1. norguhtar
        29.01.2008 06:09


        Не так много реальных задач в веб-программировании, где действительно нужны транзакции и ACID.

        Я бы не был так категоричен.


        1. erock
          29.01.2008 06:09

          Интересно было бы услышать тогда примеры.
          Очень много людей, кто рассуждает о транзакциях не представляя вообще зачем они нужны. Обычно в ответ слышишь что-то типа: "Для работы с биллингом точно надо" и т.п.


          1. norguhtar
            29.01.2008 06:09

            Как минимум для поддержания атомарности операции и как следствие целостности данных. К тому же если в MyISAM интенсивно писать в несколько потоков, то с чтением у вас будут серьезные проблемы. В InnoDB кстати с этим лучше, но надо откручивать ACID для получения нормального уровня производительности или тюнить приложение на использование транзакций.


            1. erock
              29.01.2008 06:09

              > интенсивно писать в несколько потоков
              как много случаев, когда вам в веб-приложении приходилось интенсивно писать в одну таблицу в несколько потоков?
              Уверен, что на большой проект - это одна-две таблицы. Делайте их InnoDB и будет вам счастье.


              1. norguhtar
                29.01.2008 06:09

                в случае если у вас будет посещаемый проект типа хабра то вполне будет. Они правда используют репликацию с узлом на запись и узлом на чтение.


                1. erock
                  29.01.2008 06:09

                  > в случае если у вас будет посещаемый проект типа хабра то вполне будет.
                  вспоминается выступление программеров с ЖЖ, когда они говорили, что у них ВСЕ таблицы MyISAM. Вы думаете у них слабые нагрузки? На собственном опыте - мы имели > 1000 запросов\сек тоже только на MyISAM - с атомарностью и изоляциями проблем небыло.
                  вот разделение рид и райт коннектов - это другое дело.


                  1. norguhtar
                    29.01.2008 06:09


                    вспоминается выступление программеров с ЖЖ, когда они говорили, что у них ВСЕ таблицы MyISAM.
                    > 1000 запросов\сек тоже только на MyISAM - с атомарностью и изоляциями проблем небыло.
                    у и количество читающих и пишущих. К тому же как у вас не может быть проблем с атомарностью и изоляциями если у MyISAM нет поддержки транзакций.

                    Мои вот измерения показывали что MyISAM дохнет на 20-30 одновременных массированых операциях записи или одной длинной массированной операции записи. Читаться от туда читается, а вот запись особо не ведется.


                  1. tol
                    29.01.2008 06:09

                    Ну и сколько из этой тысячи делали запись?


                    1. erock
                      29.01.2008 06:09

                      интенсивная запись была в две-три таблицы. Но с ними были проблемы не с целостностью, а с выборками из них. И тут InnoDB только замедляет.


                      1. norguhtar
                        29.01.2008 06:09

                        Вы открутите ACID от InnoDB. По умолчанию оно включено, что роняет производительность раза в три.


                      1. erock
                        29.01.2008 06:09

                        Гм. Вы просите поддержку транзакций от новых движков, но ни одна из A, C, I, D вам не нужна. Может вам не нужны транзакции?


                      1. norguhtar
                        29.01.2008 06:09

                        ACID в случае MySQL подразумевает запись каждой транзакции в лог в fsync затем запись в базу тоже с fsync. Так что если приложение не использует транзакции или транзакции короткие, то производительность сильно падает. Для того чтобы этого не происходило есть возможность отключить принудительный fsync и синкать по таймеру. При этом ACID в целом сохраняется, хотя могут быть повреждения данных или их не попадание в базу в случае обрушения MySQL движка. Транзакции при этом продолжают работать.


                  1. norguhtar
                    29.01.2008 06:09


                    вспоминается выступление программеров с ЖЖ, когда они говорили, что у них ВСЕ таблицы MyISAM. Вы думаете у них слабые нагрузки?
                    мы имели > 1000 запросов\сек тоже только на MyISAM - с атомарностью и изоляциями проблем небыло.
                    ак нет транзакций. Мой же личный опыт показывает, что MyISAM на запись работает крайне хреново, так-как лочится вся таблица и из-за этого в случае большого числа операций записи или одной длинной операции записи можно или потерять данные или они будут поступать с запозданием.


    1. tszyn
      29.01.2008 06:09

      В Maria 2.0 (после Maria 1.5, текущая - 1.0).


  1. golikov
    29.01.2008 06:09

    Я что-то не понял из описания - будут транзакции или нет?


    1. absolvo
      29.01.2008 06:09

      Если бы были бы - я думаю написали бы большими буквами, а так - увы.


    1. katremer
      29.01.2008 06:09

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


      1. erock
        29.01.2008 06:09

        а уж не Falcon ли приходит на смену InnoDB?


      1. fxposter
        29.01.2008 06:09

        Вообще-то на смену InnoDB идет Falcon, а не Maria.


        1. erock
          29.01.2008 06:09

          ага. час назад об этом написал :)


          1. fxposter
            29.01.2008 06:09

            Да я уже заметил. :) Работаю сейчас - открыл страничку давно, до твоего комментария, а читать начал только сейчас.


  1. katremer
    29.01.2008 06:09

    Йуху.


  1. Throwable
    29.01.2008 06:09

    А чем же тогда он отличается от ИнноДБ?


  1. anonymous
    29.01.2008 06:09


  1. dmach
    29.01.2008 06:09

    Собственно это приведёт к тому, что если сейчас mySQL выигрывает у полноценных БД на операциях INSERT/UPDATE (в частности за счёт отсутствия логов этих операций), то на новой версии движка она перестанет это делать.


    1. Alexus
      29.01.2008 06:09

      Кажется, в MyISAM есть отключаемый бинлог.
      Плохие технологии просто не будут использовать.


    1. tszyn
      29.01.2008 06:09

      Не перестанет - лог отключается (вместе со всеми преимуществами конечно). Кроме того Мароия поддерживает все форматы MyISAM (без логирования конечно). Дока тут : http://forge.mysql.com/wiki/Maria_Docs


  1. sylvio
    29.01.2008 06:09

    Те они собираются убить myisam только из-за лога запросов, которые все давно делают на уровне абстракции бд и страниц, плюс от которых достаточно сомнителен?


    1. tszyn
      29.01.2008 06:09

      Maria поддерживает практически все фичи MyISAM (кроме некоторых неиспользуемых) и все форматы (она сделана на основе MyISAM). Соотвестственно для старых форматов нет логирования и поддержки транзакций (в будущем - сейчас нет восстановления).


    1. tszyn
      29.01.2008 06:09

      Забыл добавить и в Марии можно отключить логирование (вместе с восстанавливаемостью конечно: http://forge.mysql.com/wiki/Maria_Docs )


  1. Maximark
    29.01.2008 06:09

    При правильной архитектуре - будет хватать и mysql 4.
    Даже на сложных (по виду :) ) запросах...


  1. anonymous
    29.01.2008 06:09


    1. tszyn
      29.01.2008 06:09

      Поддержка foreign key будет в сервере а не в engines (с поддержкой конечно и и в них). Вот что я сходу нашел по теме, думаю там и больше есть:
      http://forge.mysql.com/worklog/task.php?id=3288