Много пишет, но мало читает - какой движок хранения Mysql использовать? - PullRequest
2 голосов
/ 09 апреля 2009

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

[править] Внешние ключи не нужны. Данные просты, но они должны очень быстро выполнить предварительную запись.

Ответы [ 4 ]

3 голосов
/ 09 апреля 2009

От jpipes :

MyISAM и блокировки на уровне таблицы

В отличие от InnoDB, который использует уровень строки блокировка, MyISAM использует много более грубая система блокировки убедитесь, что данные записаны в файл данных в защищенном виде. Блокировка на уровне таблицы - единственный уровень блокировки для MyISAM, и это имеет пара последствий:

  • Любое соединение, выдающее UPDATE или DELETE для таблицы MyISAM, будет запросить эксклюзивную блокировку записи на MyISAM таблица. Если нет других замков (читай или написать) в настоящее время размещены на стол, эксклюзивная блокировка записи предоставлено и все другие соединения выдача запросов любого рода (DDL, SELECT, UPDATE, INSERT, DELETE) должны ждать, пока нить с эксклюзивная блокировка записи обновляет запись (и) это нужно, а затем снимает блокировку записи.
  • Так как есть только блокировки на уровне таблицы, нет никакой способности (как там с InnoDB), чтобы заблокировать только один или небольшой набор записей, позволяющий другим темы, чтобы выбрать из других частей данные таблицы.

Суть в том, что для написания InnoDB лучше, поскольку он блокирует меньше ресурсов и позволяет выполнять больше параллельных действий / запросов.

1 голос
/ 10 апреля 2009

«Нужно выполнять запись очень быстро» - это смутное требование. Что бы вы ни делали, запись может быть отложена из-за конфликта в базе данных. Если вашему приложению не нужно блокировать при записи записей аудита в базу данных, вы должны сделать запись аудита асинхронной и сохранить собственную очередь данных аудита на диске или в памяти (чтобы не блокировать основной рабочий поток / процесс)

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

MyISAM допускает использование одного устройства вставки и нескольких устройств чтения («одновременные вставки») при следующих обстоятельствах:

  • В столе нет «дыр»
  • Нет потоков, пытающихся выполнить ОБНОВЛЕНИЕ или УДАЛЕНИЕ

Если у вас есть таблица только для добавления, которую вы воссоздаете каждый день (или создаете новый раздел каждый день, если используете разбиение 5.1), вам может это сойти с рук.

Параллельные вставки MyISAM в основном очень хороши, ЕСЛИ их можно использовать.

При написании записей аудита делайте несколько одновременно, если это возможно - это применимо к любому используемому вами механизму хранения. Хорошей идеей для процесса аудита является «пакетирование» записей и одновременное добавление нескольких записей.

0 голосов
/ 09 апреля 2009

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

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

Для классических таблиц типа журнала или журнала, однако, это очень приятно.

0 голосов
/ 09 апреля 2009

Вы на самом деле не предоставили нам достаточно информации, чтобы сделать взвешенное предложение - вы хотите использовать внешние ключи? Блокировка на уровне строк? Блокировка на уровне страницы? Сделки?

Как правило, если вы хотите использовать транзакции, InnoDB / BerkeleyDB. Если нет, MyISAM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...