Как индексы справляются с MVCC? - PullRequest
3 голосов
/ 30 января 2011

Greetings Overflowers,

  • Насколько я понимаю (и я надеюсь, что я не прав), изменения индексов не могут быть MVCCed.
  • Мне интересно, верно ли этос большими записями, поскольку копии могут быть дорогостоящими.
  • Так как записи доступны с помощью индексов (обычно), как MVCC может быть эффективен?записи?

Были ли недавно хорошие чтения на эту тему?Очень признателен!

С уважением

1 Ответ

5 голосов
/ 03 марта 2011
  1. Сам индекс может иметь обе записи, которые можно удалить перед возвратом. Так что в этом случае одно только ondex не может быть использовано для получения записей (MVCC сделан PostGres). InnoDB / Oracle хранит только одну версию данных / индекса и, используя раздел отмены, перестраивает более старые версии для более старых транзакций.

  2. У вас не будет слишком много копий, когда БД используется в целом, так как периодически копии будут собираться мусором (в PostGres), а Oracle / InnoDB будет иметь разделы отмены, которые будут повторно использоваться при отмене / подтверждении транзакции. Если у вас слишком много длительных транзакций, очевидно, у вас будут проблемы.

  3. Индексы предназначены для ускорения доступа, более быстрого поиска записи, без касания всех из них. Индекс не обязательно должен быть точным при первом проходе, вам может понадобиться посмотреть на кортеж, чтобы убедиться, что он действителен в одной конкретной транзакции или нет (как в PostGres). Индекс racle или InnoDB даже является версионным, поэтому вы можете получать данные из самих индексов.

Прочтите это , чтобы получить подробное представление о двух способах реализации MVCC (PresGres и Oracle / InnoDB).

InnoDB MVCC и комментарии здесь также полезны

PS: я не специалист по внутренним mysql / oracle / postgres, все еще учусь, как все работает.

...