Программирование >>  Создание клиентов mysql 

1 ... 138 139 140 [ 141 ] 142 143 144 ... 201


Типы таблиц 437

BDB - это простая файловая СУБД, поддерживающая транзакции, но не располагающая каким-либо языком запросов. В MySQL эта СУБД нужна дя того, чтобы можно б1о работать с таблицами в режиме транзакций.

С Web-узла MySQL можно загрузить скомпилированную версию программы, в которую встроена поддержка BDB. Если впоследствии потребуется отключить эту поддержку, достаточно будет запустить демон mysqld с опцией -skip-bdb. На этапе компиляции MySQL поддержка BDB включается с помощью опции -with-berkeley-db. MySQL нужна исправленная версия BDB, которая входит в исходный дистрибутив MySQL.

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

С функциональной точки зрения таблицы BDB ведут себя аналогично таблицам MylSAM. Нет никакж ограничений на число столбцов или индексов, как в случае резидентных таблиц. Единственное условие: для таблиц BDB обязательно наличие первичного ключа. Если он не задан, MySQL самостоятельно создаст внутренний первичный ключ, охватывающий первые пять байтов каждой записи. К таблицам BDB можно применять инструкцию LOCK TABLES, но при частой работе с такими таблицами лучше пользоваться преимуществами транзакций.

Сами транзакции реализуются посредством журнальных файлов, куда записываются сведения об изменении табличных данных. Когда происходит отмена транзакции, функции библиотеки BDB читают журнальные файлы и делают обратные исправления. Журнальные файлы носят именавида log. 0000000001 и располагаются в каталоге данных, хотя эту установку можно изменить с помощью опции logdir, указываемой при запуске сервера.

MySQL пытается очищать журнальные файлы BDB в момент создания нового журнального файа. При этом удаляются ненужные файы. Если не хотите жждать, воспользуйтесь инструкцией FLUSH LOGS.

В BDB таблицы блокируются на уровне страниц. Страница - это совокупность последовательно расположенных записей таблицы. Страничные блокировки необходимы, когда MySQL сканирует таблицу, а также при удалении, вставке и обновлении записей. В отличие от таблиц MylSAM, блокировки таблиц BDB могут приводить к возникновению тупиков, т.е. взаимоблокировок. В подобной ситуации одна или несколько транзакций отменяется. Это следует учитывать при написании приложений. Инструкция, которая приводит к автоматической отмене транзакции, возвращает сообщение об ошибке. Транзакции отменяются также в случае нехватки места в файловой системе.

СУБД BDB не ведет подсчет записей в таблицах, но MySQL хранит собственный счетчик. Он используется модулем оптимизации объединений при выборе индексов. Значение счетчика может быть неточным, если произошел сбой базы данных, но счетчик можно сбросить с помощью инструкции ANALYZE TABLE или OPTIMIZE TABLE. Ведение счетчика записей немного замедляет работу с таблицами BDB.

Табличные данные хранятся в виде двоичного дерева. Это более медленный метод, чем тот, который применяется для таблиц MylSAM. СУБД BDB оставляет в дере-



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

В отличие от таблиц АМ, индексы в таблицах BDB не сжимаются, т.е. они занимают больше места. Если в запросе участвуют столбцы одного индекса, обращение к табличным данным адодится, так как в этом нет необходимости. С этой целью BDB позволяет объединять первичный ключ со столбцами другого индекса (для таблиц MylSAM такая возможность не поддерживается).

Gemini

Функции работы с таблицами Gemini реализовали программисты компании NuSphere (www.nusphere.com). Эта компания обеспечивает поддержку и обучение пользователей MySQL. Бета-тестирование таблиц Gemini началось в апреле 2001 г. и на момент написания книги ещепродолжалось.

В этих таблицах отсутствуют столбцы типа BLOB и TEXT. Количество пользователей, которые могут одновременно работать с таблицами, по умолчанию равно 100. Данную установку можно изменить с помощью серверной переменной gemini connect ion liinit.

Таблицы Gemini блокируются на уровне записей, так как это выгоднее с точки зрения многопользовательской работы. Если заблокировать всю таблицу, другие потоки вынуждены будут встать в очередь на доступ к таблице. Блокировки записей предотвращают доступ к единичным записям, позволяя нескольким потокам работать с одной таблицей, но в разных ее участках .

Как и в случае таблиц MylSAM, доступ кфайлу данных таблицы Gemini не требуется, если в запросе участвуют столбцы одного индекса. Для этих таблиц также ведется счетчик записей, используемый модулем оптимизации объединений.

Heap

MySQL хранит таблицы типа Heap в памяти, а не в файловой системе. Следовательно, доступ к ним осуществляется чрезвычайно быстро. Для поиска записей применяется но проблем со вставкой или с удалением записей не возникает, в отличие от других реализаций резидентных таблиц.

Резидентные таблицы не располагают многими возможностями обычных таблиц. Они не могут иметь столбцы типа BLOB или TEXT. Нельзя использовать флаг AUTOINCREMENT. Можно создавать индексы, но нельзя индексировать столбцы, допускающие значения NULL. Индексы используются только в операциям = и <=>.

Записи резидентных таблиц имеют фиксированную длину. Для столбцов типа VARCHAR сразу выделяется максимальное число байтов. Поскольку ть - ограниченный ресурс, можно задать предельное количество записей в резидентной таблице. Для этого предназначена опци rows инструкции CREATE TABLE. Серверная переменная задает максимальный объем памяти, занимаемой

всеми резидентными таблицами.

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



Типы таблиц 439

InnoDB

СУБД InnoDB б1ла разработана и (Heikki Tuuri) из компании Inno-base Оу {wxvw.innodh.com)- финского производителя программного обеспечения, специализирующегося на технологии реляционных баз данных. InnoDB представляет собой результат исследований, проводимых Хейкки в университете Хельсинки. Поддержка InnoDB появилась в MySQL версии 3.23.34а. Сама СУБД доступна на условиях открытой лицензии.

На Web-узле InnoDB можно найти массу информации о деталях работы ядра этой СУБД. Ядро не существует само по себе, а является дополнением к MySQL. С Web-узла MySQL можно загрузить скомпилированную версию программы, в которую встроена поддержка InnoDB. Если впоследствии потребуется отключить эту поддержку, достаточно будет запустить демон с опцией На этапе компиляции MySQL поддержка InnoDB включается с помощью опции -innodb. Исходные коды InnoDB входят в исходный дистрибутив MySQL.

В отличие от таблиц MylSAM, где для каждой таблицы создается один файл данных, данные InnoDB хранятся в больших совместно используемых файлах. Можно создать произвольное число файлов данных, но их нельзя будет удалить. Размер файлов определяется в конфигурационном файле. Если нужно уменьшить объем дискового пространства, занимаемого таблицами InnoDB, создайте резервные копии таблиц, после чего удалите все файлы InnoDB и позвольте программе MySQL восстановить их в соответствии с новыми установками рационного файла. Журнальные файлы InnoDB можно безопасно удалить после остановки сервера. При повторном запуске сервера программа MySQL создаст журнальные файлы заново.

В листинге 24.1 приведен пример опций, которые необходимо добавить в конфигурационный файл в группу [mysqld], чтобы активизировать таблицы InnoDB. Размер файлов здесь задан относительно небольшим, что вполне подходит для целей эксперимента. На практике используются файлы гораздо большего размера. Список опций и переменных демона mysqld был приведен в главе 14, Утилиты командной строки .

innodbdatahomedir = /usr/local/var/innodb/

innodb data file path = ibdatal/ibdatal:lOOM;ibdata2/ibdata2:lOOM

set-variable = innodb mirrored log groups=l

innodb log group home dir = /dTskl/innodb/log

set-variable = innodb log files in group=3

set-variable = innodb Tog Tile size=16M

set-variable = innodb log buf fer size=8M

innodb flush log at trx commit=l

innodb log arch dir = /disk2/innodb/log

innodb log archive=0

set-variable = innodb buffer pool size=25M set-variable = innodb additional mem pool size=5M

set-variable = innodb file io threads=4

set-variable = innodb lock wait timeout=50



1 ... 138 139 140 [ 141 ] 142 143 144 ... 201

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика