Задавайте вопросы, мы ответим
Вы не зашли.
В базу данных потихоньку сохраняется в день пара тройка десятков килобайт... А диск не резиновый. как-нибудь можно в MySQL 5.0.45 установить ограничение на размер таблицы или базы данных? И если можно то что будет происходить при переполнении? Затирание старых данных или ф топку посланы будут новые?
Неактивен
Нет, никак ограничить размер изнутри MySQL нельзя, т.к. это не несет смысла.
Вы можете ограничить размер файлов с помощью квот операционной системы.
При этом Вы будете получать при заполнении базы ошибки типа "не могу выделить
место на диске", когда закончится квота.
Неактивен
Еще подумал Вы можете ограничить таблицу MyISAM по количеству строк (приблизительно)
командой типа ALTER TABLE `table` MAX_ROWS=100000;
Это _не_ команда ограничения жесткого, но она устанавливает размер указателя такой, чтобы
вмещать нужное количество строк. При этом при переполнении таблицы Вы будете получать
ошибки типа "Out of pointer space".
Неактивен
м... прочитал на http://www.botik.ru/~rldp/mysql/mysqlpro/triggers.htm что с версии 5.0.2 в mysql триггеры реализованы. попробую тогда их нацарапать. чтобы перед записью проверяли количество строк в таблице и удаляли старые.
Неактивен
Триггер будет вызываться на каждое добавление строки. Это будет влиять
на производительность системы в целом. Возможно, если Вас волнует 20кб данных
в день, Вас также будет волновать возросшее потребление производительных
ресурсов системы.
Если Вас устраивает система с удалением старых строк, проще всего удалять
их раз в день (например, ночью). Так Вы ограничите количество строк в таблице
и в то же время не создадите дополнительной нагрузки во время их добавления.
Неактивен
paulus написал:
Это будет влиять на производительность системы в целом.
хм... спасиб. я об этом как-то не подумал
paulus написал:
Если Вас устраивает система с удалением старых строк, проще всего удалять
их раз в день (например, ночью).
да, пожалуй, так и сделаю.
Неактивен
с версии 5.0.2 в mysql триггеры реализованы. попробую тогда их нацарапать. чтобы перед записью проверяли количество строк в таблице и удаляли старые.
К сожалению, так не получится, т.к. триггер не сможет модифицировать строки из той же таблицы (если сделаете такой триггер и он сработает - получите ошибку 1442).
Придется Вам, видимо, воспользоваться периодически запускающимся скриптом, который удаляет данные.
Кстати, данные будут занимать меньше в таблице c ENGINE = ARCHIVE
http://dev.mysql.com/tech-resources/art … ngine.html
Вместо удаления можно их в такую таблицу переносить - вдруг потом понадобятся.
Неактивен
paulus написал:
Нет, никак ограничить размер изнутри MySQL нельзя, т.к. это не несет смысла.
Вы можете ограничить размер файлов с помощью квот операционной системы.
При этом Вы будете получать при заполнении базы ошибки типа "не могу выделить
место на диске", когда закончится квота.
Что-то не вышло у меня
Неактивен
Ясно сказано
paulus написал:
Нет, никак ограничить размер изнутри MySQL нельзя, т.к. это не несет смысла.
Вы можете ограничить размер файлов с помощью квот операционной системы.
А Вы все равно пытаетесь использовать MySql. Тогда смотрите в сторону триггеров или
Неактивен
А вот это уже интересно, надо попробовать. Но это придется в запрос писать, что может быть не очень удобно. Хотелось бы ограничить на уровне базы. С триггерами да выходит, но мне посоветовали параметр MAX_ROWS, вот я и думаю, почему он не работает. Его же проще добавить, чем триггер использовать.
Неактивен
И опять же если мне нужно снять ограничение, то нужно запрос менять. А может тогда если MAX_ROWS не работает, то можно его хотя бы как-то по другому использовать.
Скажем если он есть то делаем
WHERE (SELECT COUNT(*) FROM tbl_name)<3
или
INSERT INTO tbl_name ... WHERE (SELECT COUNT(*) FROM tbl_name)<MAX_ROWS
ну или как-то типа
INSERT INTO tbl_name ... WHERE (SELECT COUNT(*) FROM tbl_name)<(select MAX_ROWS from tbl_name )
Неактивен
тяжело следить за обсуждением одного вопроса сразу по нескольким темам
platedz написал:
параметр MAX_ROWS, вот я и думаю, почему он не работает.
на это уже был ответ - это не жесткий предел, а скорее подсказка механизму хранения, что таблица должна иметь возможность хранить по крайней мере столько строк.
platedz написал:
И опять же если мне нужно снять ограничение, то нужно запрос менять. А может тогда если MAX_ROWS не работает, то можно его хотя бы как-то по другому использовать.
Скажем если он есть то делаем
WHERE (SELECT COUNT(*) FROM tbl_name)<3
или
INSERT INTO tbl_name ... WHERE (SELECT COUNT(*) FROM tbl_name)<MAX_ROWS
ну или как-то типа
INSERT INTO tbl_name ... WHERE (SELECT COUNT(*) FROM tbl_name)<(select MAX_ROWS from tbl_name )
чем не устраивает триггер? это явно проще чем в каждый запрос добавлять условие.
Неактивен
vasya написал:
тяжело следить за обсуждением одного вопроса сразу по нескольким темам
platedz написал:
параметр MAX_ROWS, вот я и думаю, почему он не работает.
на это уже был ответ - это не жесткий предел, а скорее подсказка механизму хранения, что таблица должна иметь возможность хранить по крайней мере столько строк.
platedz написал:
И опять же если мне нужно снять ограничение, то нужно запрос менять. А может тогда если MAX_ROWS не работает, то можно его хотя бы как-то по другому использовать.
Скажем если он есть то делаем
WHERE (SELECT COUNT(*) FROM tbl_name)<3
или
INSERT INTO tbl_name ... WHERE (SELECT COUNT(*) FROM tbl_name)<MAX_ROWS
ну или как-то типа
INSERT INTO tbl_name ... WHERE (SELECT COUNT(*) FROM tbl_name)<(select MAX_ROWS from tbl_name )чем не устраивает триггер? это явно проще чем в каждый запрос добавлять условие.
Да всем устраивает. Просто изучаю, какие варианты возможны в принципе.
В любом случае большое спасибо за ответы. Вы самый грамотный и отзывчивый форум по SQL изо всех мне знакомых
Неактивен