Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте.
Меня интересуют ограничения таблицы MyISAM. Предварительный просмотр постов форума не дал результатов.
Судя по документации, размер таблицы, практически достаточен для любых разумных объемов данных. А как обстоит дело с максимальным количеством записей в одной таблице MyISAM?
У меня база для хранения технологических параметров, и количество хранимых записей в через несколько лет превысит 2 в 32-й степени, то есть 4 миллиарда с хвостиком. Попытка увеличить это при помощи ALTER TABLE `techdb`.`t_history` MAX_ROWS = 100000000000; приводит к установке MAX_ROWS в 4294967295. Это и есть предельное число записей в таблице MyISAM? Или существует возможность обойти это.
Пока поставил в работу тестовое приложение и пихаю туда записи, но придется подождать 43 дня .
Неактивен
Подозреваю, что Вы упираетесь в ограничения ОС
http://dev.mysql.com/doc/refman/5.1/en/full-table.html
Даже на ОС с ограничениями, Вы можете разбить табличку на несколько кусков и сделать
из них MERGE. Более того, некоторые из кусков можно сделать R/O (с помощью myisampack) -
так они будут занимать куда меньше места без уменьшения скорости доступа (а иногда и с
увеличением ее ).
Неактивен
Да, да, это я читал, на NTFS предельный размер таблицы 2 терабайта. Но извините за назойливость, а 4 миллиарда 294 миллиона записей точно не остановят MyISAM?
А как разбить таблицу на куски прозрачно для приложения? Ведь оно же должно обращаться к конкретной таблице по имени.
По приведенной ссылке прочитал об myisam_data_pointer_size. Если ограничение на 4 млрд строк все же существует, то его можно снять увеличив размер указателя до 7? Я планирую размещать СУБД на Windows машине. Для этого мне необходимо пересобрать MySQL из исходных текстов?
Отредактированно Bor (06.02.2008 16:06:28)
Неактивен
Разбить таблицу так:
CREATE TABLE a1 (.. список полей ..) ENGINE=MyISAM;
CREATE TABLE a (.. те же поля ..) ENGINE=MERGE UNION=(a1) INSERT_METHOD=LAST;
Когда данных станет достаточно много, создаете вторую таблицу
CREATE TABLE a2 LIKE a1;
DROP DABLE a;
CREATE TABLE a (.. те же поля ..) ENGINE=MERGE UNION=(a1,a2) INSERT_METHOD=LAST;
Обращение в такой схеме происходит к таблице a. Чтение производится физически как из
a1, так и из a2, запись только в последнюю (т.е. в a2). Обновления - тоже в любую.
Неактивен
Спасибо! Я думаю, вариант с MERGE меня вполне устроит.
Неактивен