Falcon Storage Engine

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 00:24, 27 декабря 2017.
Falcon
Создатели: Jim Starkey
Разработчики: Sun Microsystems
Предыдущий выпуск: MySQL 6.0.9
Состояние разработки: Inactive
Операционная система: Cross-platform
Тип ПО: Database Engine
Лицензия: Универсальная общественная лицензия GNU
Веб-сайт www.mysql.com/mysql60/

Falcon был механизмом транзакционного хранилища, разработанным для системы управления реляционными базами данных MySQL. Разработка была остановлена после того, как Oracle приобрела MySQL. Он основывался на движке базы данных Netfrastructure. Falcon был разработан, чтобы пользоваться файловой системой Sun's zfs.

Анализ архитектуры показал интересную смесь возможных характеристик производительности, в то время как тесты низкого уровня на первом альфа-релизе в 5.1.14 показали, что Falcon работает по-разному как от InnoDB, так и от MyISAM.[Источник 1]

Достоинства

Кэш строк. Тот факт, что Falcon имеет отдельный кеш строк, велик, поскольку он может иметь гораздо больше данных, кэшированных в одном и том же размере кеша. Вам может понадобиться только одна строка с 8-16K-страницы, но для кэша страниц вам необходимо кэшировать всю страницу, поэтому необходимо кэшировать 1000 из 100 байтов, которые находятся на разных страницах. В этом отношении существуют методы проектирования для повышения эффективности кеша страниц, поэтому на практике разница может быть меньше.

Компактные индексы. Однако огромные индексы показывают, что большая часть проблем производительности InnoDB возникает. Однако мы должны увидеть, как «компактные» они будут в реальных случаях и сколько производительности он даст. Поскольку «SHOW TABLE STATUS» не показывает размер индекса в выпуске, который мы тестировали, трудно понять, насколько на самом деле небольшие индексы.

Упорядоченные данные читаются. В отличие от других систем хранения данных, которые будут считывать данные строки по мере прохождения индекса, Falcon может оптимизировать его, сначала прочитав индекс (возможно, многие индексы), и только затем считывая данные строки в отсортированном порядке. Это может сильно помочь, если вы пересекаете значительную часть таблицы (или данные, которые локально хранятся, но в случайном порядке).

Сжатие строк. Falcon использует некоторые хорошие методы сжатия строк, например, используя только столько байтов для целого числа, сколько требуется, не сохраняя значения столбца, если оно по умолчанию и т.д.. Это хорошо, хотя может показаться странным, если вы не знаете об этой функции , например, изменение значения по умолчанию требует перестройки таблицы, хотя для других систем хранения данных это часто можно было сделать просто путем изменения метаданных (в любом случае он не реализован в MySQL).

Только зафиксированные изменения идут на диск. InnoDB изменяет данные в базе данных при ее изменении, Falcon только тогда, когда он установлен. У этого есть некоторые хорошие стороны, такие как отсутствие проблем с очень длинными откатами при восстановлении, но также означает, что у вас должно быть достаточно памяти для хранения всех транзакций. Но если у вас длительные транзакции, например пакетные задания, у вас могут возникнуть проблемы или вы будете вынуждены переписывать их для фиксации часто.

Недостатки

Нет спинлоков. Falcon не использует спинлоки. У этого есть своя собственная реализация блокировки, которая ожидает, что система работы будет ждать, если ресурс недоступен. На нескольких системах ЦП нужно немного "покрутиться", по крайней мере, для некоторых типов шлюзов, где конфликты будут частыми. И теперь даже ноутбуки получают несколько ядер, поэтому можно забыть о том, что спинлоки теряют процессорное время на одном процессорном ящике без значительной выгоды.

Нефиксированный размер кеша. Это незначительно. Falcon использует минимальные и максимальные размеры для кеша строк вместо одного размера, это сложно. Если у меня 8 ГБ оперативной памяти, я могу предположить, что я хочу, чтобы 4 ГБ выделялся для кеша строк, и мне все равно, как управлять этими 4 ГБ, чтобы он был наиболее эффективным. Должен ли я указывать минимальный размер 3 ГБ или 3,8 ГБ? В чем разница ? Будет ли чистка работать слишком часто, если я буду держать их близко?[1]

Нет «использование индекса». Falcon всегда должен проверять данные строки, даже если вы извлекаете только столбцы, которые находятся в индексе. Это большая проблема, поскольку запросы с охватом индексирования - отличная оптимизация для широкого круга запросов.

Нет поддержки индекса кластеров. В отличие от InnoDB Falcon не кластеризует данные с помощью основного ключа или любого другого ключа. Это хорошо для некоторых приложений и плохо для других. Существует большое количество приложений, которые оптимизированы для InnoDB, который имеет кластеризацию, поэтому здесь знак «-». Если вы пользуетесь небольшими диапазонами первичных ключей с помощью InnoDB, вам нужно будет выполнить только пару считываний страниц, а Falcon, если строки будут вставлены в разное время, потребуется много разбросанных чтений.

Табличное пространство для каждой базы данных. Вы можете заметить, что теперь каждая база данных в Falcon получает свое собственное табличное пространство и собственный набор журналов. С типичным для MySQL использованием баз данных, так же как и для каталогов, это может быть проблемой - если транзакция порождает несколько баз данных, вам нужно несколько флеш-журналов для фиксации, а также простой эфир, который вы используете XA, чтобы синхронизировать их, что дорого или вы сможете изменить транзакции совершать в одной базе данных, а не в другой. Другая проблема, которую вы увидите, - это согласованные моментальные снимки, совместимые только для базы данных, поэтому, если вы запустили транзакционную таблицу в базе данных A и некоторое время после доступа к таблице в базе B, вы увидите записи в B, которые были изменены/вставлены после начала транзакции.

Режимы изоляции. До сих пор поддерживается ограниченное количество режимов изоляции, в том числе поддержка SELECT FOR UPDATE. Именно поэтому у Falcon есть оптимистичный параллельный параллелизм, который может дать вам проблемы, если у вас есть интенсивная рабочая блокировка, поэтому многие запросы обновления должны ждать блокировок на уровне строк. С Falcon на данный момент ситуация довольно забавная, она все равно ждет других транзакций, которые обновили строку для фиксации, а затем сбой «ERROR 1020 (HY000): запись изменилась с момента последнего чтения в сообщении«t». Если вы обнаружите, что поведение Falcon или InnoDB все же лучше подготовиться к тому, что это место, где все по-другому, и ваше приложение, возможно, потребуется изменить. Это область, где до сих пор отсутствует подробная документация.

Нет защиты от частичной записи страниц. Это означает, что если одностраничная запись не была атомарной, поэтому только часть страницы была изменена, а другая часть осталась прежней, и ваша база данных может закончиться на стадии, не подлежащей восстановлению. Вот почему InnoDB имеет «двойной буфер записи innoDB».

Использование Falcon

Вы можете загружать бинарные файлы MySQL, включая Falcon с сайта MySQL AB. Вы также можете скачать исходный код Falcon dev.mysql.com/downloads/mysql/6.0.html

Процедура установки такая же, как в предыдущих версиях (5.1/5.0/4.1 или меньше). Вы можете установить rpm, извлечь из tar.gz или создать из источника. Чтобы проверить, что Falcon установлен, запустите инструкцию «SHOW ENGINES». Если есть пункт «Engine: Falcon» и «Support: YES», можно использовать Falcon.

mysql> SHOW ENGINES \G 
(snip) 
*************************** 3. row *************************** 
      Engine: MyISAM
     Support: YES
     Comment: Default engine as of MySQL 3.23 with great performance
Transactions: NO 
          XA: NO
  Savepoints: NO
*************************** 4. row ***************************
      Engine: Falcon
     Support: DEFAULT
     Comment: Falcon storage engine
Transactions: YES 
          XA: NO
  Savepoints: YES
*************************** 5. row *************************** 
      Engine: MRG_MYISAM
     Support: YES
     Comment: Collection of identical MyISAM tables
Transactions: NO 
          XA: NO
  Savepoints: NO
*************************** 6. row *************************** 
      Engine: InnoDB
     Support: YES
     Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES 
          XA: YES
  Savepoints: YES
(snip) 

Чтобы создать таблицу Falcon, просто добавьте «ENGINE = Falcon» в инструкцию CREATE TABLE или ALTER TABLE. То же самое происходит с созданием других типов таблиц.

mysql> CREATE TABLE tbl1 (id INTEGER AUTO_INCREMENT PRIMARY KEY, value VARCHAR(30)) ENGINE=Falcon; 
mysql> SHOW CREATE TABLE tbl1\G 
*************************** 1. row ***************************
       Table: tbl1
Create Table: CREATE TABLE 'tbl1' ( 
  'id' int(11) NOT NULL AUTO_INCREMENT,
  'value' varchar(30) DEFAULT NULL,
  PRIMARY KEY ('id')
) ENGINE=Falcon DEFAULT CHARSET=latin1
When the ENGINE clause is omitted, it automatically becomes a Falcon table if "default-storage-engine=Falcon" is specified in the database configuration file my.cnf.

Transactions are also supported:

mysql> START TRANSACTION; 
mysql> INSERT INTO tbl1 VALUES(null,'abc'); 
mysql> ROLLBACK; 
mysql> SELECT * FROM tbl1; 
Empty set (0.00 sec)

Набор результатов пуст, потому что INSERT откатился назад.

Как вы видите, поскольку Falcon является всего лишь одним из механизмов хранения в MySQL, синтаксис SQL не отличается от других механизмов хранения.

Итог о продукте

К настоящему времени движок находится в разработке уже более 4 лет, а «бета» ещё настолько сырая, что Falcon проигрывает практически по всем тестам не только своему «прародителю» InnoDB, но и MyISAM. В то же время движок Maria развивается куда быстрее (этот движок является развитием MyISAM, а не InnoDB, хотя и является полностью транзакционным и обладает всеми свойствами ACID), поэтому вовсе не понятно, зачем mySQL разрабатывает столько движков одновременно, которые фактически равны друг другу по возможностям.[Источник 2]

Примечания

  1. На данный момент в руководстве не говорится об этом.

Источники

  1. Wikipedia [Электронный ресурс]: Falcon (storage engine) / Дата обращения: 20.12.2017. Режим доступа: https://en.wikipedia.org/wiki/Falcon_(storage_engine).
  2. Хабрахабр [Электронный ресурс]: Обзор движка Falcon в mySQL / Дата обращения: 20.12.2017. Режим доступа: https://habrahabr.ru/post/66350/.