2012-12-05 3 views
0

У меня есть журнальный стол с тяжелыми операциями записи: это было причиной выбора MyISAM для него.Можно ли сделать неблокирующее чтение таблицы MyISAM?

Теперь мне нужно выполнить сложный запрос SELECT, который занимает много времени и блокирует таблицу: тогда никто не может писать.

  • таблица имеет высокую «запись» нагрузки
  • Я не волнует, если я не получаю самые последние записи
  • данные никогда не удаляется

Каковы опции для чтения данных без блокировки таблицы?

  • LIMIT применяется после того, как запрос будет завершен, так что это не вариант
  • Изменение всех операторов INSERT, чтобы сделать их ЗАДЕРЖКОЙ не вариант
  • InnoDB также не вариант
  • HANDLER запрос это не вариант: мне нужен комплекс, где условия
+1

Из любопытства, почему InnoDB не вариант? –

+0

В основном из-за тяжелой письменности. А также - исторически :) – kolypto

+1

Но InnoDB не медленнее, чем MyISAM. Может ли TokuDB быть вариантом? –

ответ

2

Некоторые предложения, возможно, один или другой подходит для вас

  1. вариант: Подчиненный

    Настройка раб, который используется для запроса SELECT,. Это не будет блокировать вставки. Однако для этого требуется второй сервер, некоторая конфигурация и пространство для хранения, поэтому это нехорошее решение, просто чтобы получить ваши данные.

  2. вариант: использовать низкоприоритетная-обновления: http://dev.mysql.com/doc/refman/5.0/en/table-locking.html

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

  3. рабочий процесс

    • Сделайте свои вставки как обычно.
    • создать рабочий процесс, который «перемещает» ваши записи в журнале (для каждой строки таблицы A, сделать вставку в таблице B, удалить строку в таблице A) в другую таблицу.
    • Теперь вы можете запросить таблицу В
Смежные вопросы