Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день, всем!
Есть таблица с ENGINE = HEAP в эту таблицу много записывается/удаляется, но еще больше из нее читается данных, порядка 3-4 зап./сек(один процесс в нее пишет) и 6-8 чтен./сек(читают много процессов), т.е таблицу все время насилуют с разных сторон. Проблема заключается в том, что из таблицы все время нужно доставать актуальные данные, но т.к. она(таблица) все время обвешана блокировками это не всегда удается. Т.е. либо селекты ждут своей очереди, либо инсерты.
В голове крутится одна мысль, но я не знаю как ее реализовать. Организовать две таблицы, одна с ENGINE = MyISAM(1) др. с ENGINE = HEAP(2), соответственно в (1) будут писаться/удалятся данные, а из (2) читаться, но вопрос в том, как их между собой синхронизировать?
MySQL 4.1.22
P.S. : Решение связанное с переходом на новую версию MySQL или поменять БД, пока не рассматривается.
Неактивен
Кажется, с такой нагрузкой может справиться и innodb, который будет блокировать
построчно, а не таблицу целиком. В 4.1, вроде, уже была рабочая версия.
Но вообще, если Вы упираетесь в блокировки MEMORY, — что-то пошло совсем-совсем
плохо. Действия над памятью всегда только processor-bound
Неактивен
Дело все в том, что этот движок не активен на боевом сервере. Его намеренно отключили, чтобы он лишние ресурсы не отъедал
*************************** 8. row ***************************
Engine: InnoDB
Support: DISABLED
Comment: Supports transactions, row-level locking, and foreign keys
Но его все же удалось протестировать под данной нагрузкой на тестовом сервере, и он немного быстрее MyISAM, но медленнее чем HEAP.
Т.о InnoDB не годится.
А можно, все-таки, как-то развить мою идею или она совсем нереальна?
Неактивен
Можно копировать данные раз в сколько-то времени из одной таблички в другую,
но тогда у Вас будут выборки отставать от изменений данных на это время.
Неактивен
Это отставание недопустимо.
Как вообще можно синхронизировать две таблицы в MySQL, находящиеся в одной базе?
Неактивен
Значит, Вам нужна одна таблица, никуда не денешься. Смотрите в сторону PS
первого сообщения — увеличение мощности процессора, переход на HandlerSocket.
Неактивен
paulus написал:
Смотрите в сторону PS первого сообщения — увеличение мощности процессора
А что такое PS ?
Неактивен
оппппссс...ступил, все понятно
А иных предложений нет?
Неактивен
в эту таблицу много записывается/удаляется, но еще больше из нее читается данных, порядка 3-4 зап./сек(один процесс в нее пишет) и 6-8 чтен./сек(читают много процессов), т.е таблицу все время насилуют с разных сторон.
4 записи на 8 чтения , это совсем немного.
Возможно сами запросы не оптимальны.
Неактивен
Сами запросы, проще некуда.
С количеством запросов в секунду я конечно же ошибся. Смысл был в том, что в один и тот же период времени производятся разные операции с таблицей. Например, вставка-чтение, апдейт-вставка, адейт-чтение и т.п.
Как то так.
Неактивен
beast написал:
Сами запросы, проще некуда.
С количеством запросов в секунду я конечно же ошибся. Смысл был в том, что в один и тот же период времени производятся разные операции с таблицей. Например, вставка-чтение, апдейт-вставка, адейт-чтение и т.п.
Как то так.
Ну так а каком же количестве запросов идёт речь ?
Какое количество записей в таблице ?
Что за запись ? Апдейты по множеству полей что ли ?
У меня в одном проекте, запись в HEAP по 100 записей в секунду, и блокировок при этом вообще не видно.
Приведите пример запросов и время ихнего выполнения.
Ну а если говорить а космических скоростях, то вот почитайте про хвалёный HandlerSocket
История о том, как достичь 750,000 запросов в секунду
Неактивен