Максимальное количество строк в таблице ядра СУБД MS Access? - PullRequest
14 голосов
/ 03 августа 2009

Мы знаем, что ядро ​​базы данных MS Access «задушено», чтобы максимальный размер файла составлял 2 ГБ (или, возможно, внутренняя проводка была ограничена до некоторой мощности 2 из 4 КБ страниц данных). Но что это означает на практике?

Чтобы помочь мне измерить это, можете ли вы указать максимальное количество строк, которое можно вставить в таблицу ядра базы данных MS Access?

Чтобы соответствовать определению таблицы, все строки должны быть уникальными, поэтому требуется уникальное ограничение (например, PRIMARY KEY, UNIQUE, CHECK, макрос данных и т. Д.).

РЕДАКТИРОВАТЬ: Я понимаю, что есть теоретический предел, но меня интересует практический (и не обязательно практически осуществимый ), предел реальной жизни.

Ответы [ 8 ]

12 голосов
/ 04 августа 2009

Некоторые комментарии:

  1. Файлы Jet / ACE организованы в страницы данных, что означает наличие некоторого свободного пространства, когда границы ваших записей не совпадают с вашими страницами данных.

  2. Блокировка на уровне строк значительно сократит количество возможных записей, поскольку для каждой страницы данных требуется одна запись.

  3. В Jet 4 размер страницы данных был увеличен до 4 КБ (с 2 КБ в Jet 3.x). Поскольку Jet 4 была первой версией Jet, поддерживающей Unicode, это означало, что вы можете хранить 1 ГБ двухбайтовых данных (т. Е. 1 000 000 000 двухбайтовых символов), а при включенном сжатии Unicode - 2 ГБ данных. Таким образом, на количество записей будет влиять то, включено ли сжатие Unicode.

  4. Поскольку мы не знаем, сколько места в файле Jet / ACE занято заголовками и другими метаданными, а также точно, сколько занимает хранение индекса комнаты, теоретический расчет всегда будет ниже того, что практичны.

  5. Чтобы получить максимально эффективное хранилище, вам нужно использовать код для создания базы данных, а не пользовательский интерфейс Access, поскольку Access создает определенные свойства, которые не нужны чисто Jet. Это не означает, что их много, поскольку свойства, установленные для значений по умолчанию Access, обычно вообще не устанавливаются (свойство создается, только если вы измените его на значение по умолчанию - это можно увидеть, циклически просматривая поле коллекция свойств, т. е. многие из свойств, перечисленных для поля в конструкторе таблиц Access, отсутствуют в коллекции свойств, поскольку они не были установлены), но вы можете ограничить себя типами данных, специфичными для Jet (поля гиперссылок) например, только для доступа).

Я просто потратил целый час на это, используя Rnd (), чтобы заполнить 4 поля, определенные как байт типа, с составным PK на четыре поля, и потребовалось вечно, чтобы добавить достаточно записей, чтобы получить любую значительную часть 2 ГБ. , На более чем 2 миллионах записей размер файла был менее 80 МБ. Я наконец-то ушел после того, как набрал всего 700K 7 МИЛЛИОНОВ записей и файл сжался до 184 МБ. Время, необходимое для того, чтобы подняться около 2 ГБ, просто больше, чем я готов потратить!

8 голосов
/ 06 августа 2009

Вот моя попытка:

Я создал таблицу из одного столбца (INTEGER) без ключа:

CREATE TABLE a (a INTEGER NOT NULL);

Вставленные целые числа в последовательности, начинающейся с 1.

Я остановил его (произвольно через много часов), когда он вставил 65 632 875 строк. Размер файла составлял 1 029 772 КБ.

Я сжал файл, который немного уменьшил его до 1 029 704 КБ.

Я добавил PK:

ALTER TABLE a ADD CONSTRAINT p PRIMARY KEY (a);

, который увеличил размер файла до 1 467 708 КБ.

Это говорит о том, что максимум находится где-то около отметки в 80 миллионов.

4 голосов
/ 03 августа 2009

Как уже говорили другие, это комбинация вашей схемы и количества индексов.

У друга было около 100 000 000 исторических цен акций, ежедневных котировок закрытия, в MDB, который приблизился к пределу в 2 Гб.

Он вытащил их, используя код, найденный в статье базы знаний Майкрософт. Я был довольно удивлен, что какой бы сервер он не использовал, он не отключал его после первых 100 тысяч записей.

Он мог просмотреть любую запись менее чем за секунду.

2 голосов
/ 03 августа 2009

Прошло несколько лет с тех пор, как я последний раз работал с Access, но файлы больших баз данных всегда имели больше проблем и были более подвержены повреждению, чем файлы меньших размеров.

Если файл базы данных не доступен только одному человеку или не хранится в надежной сети, вы можете столкнуться с проблемой до достижения предела размера базы данных 2 ГБ.

1 голос
/ 03 августа 2009

Мы не обязательно говорим здесь о теоретических ограничениях, мы говорим о реальных ограничениях максимального размера файла 2 ГБ И схемы базы данных.

  • Является ли ваша база данных одной таблицей или множественный?
  • Сколько столбцов в каждой таблице?
  • Какие типы данных?

Схема находится на одном уровне с числом строк в определении, сколько строк вы можете иметь.

Мы использовали Access MDB для хранения экспорта данных MS-SQL для статистического анализа некоторыми нашими корпоративными пользователями. В этих случаях мы экспортировали структуру нашей основной таблицы, обычно четыре таблицы с 20-150 столбцами, варьирующимися от ста байтов в строке до более 8000 байтов в строке. В этих случаях мы столкнулись бы с несколькими сотнями тысяч строк данных, допустимых на МДБ, чтобы мы их отправили.

Итак, я просто не думаю, что на этот вопрос есть ответ в отсутствие вашей схемы.

0 голосов
/ 08 июня 2014

При работе с 4 большими таблицами Db2 я не только нашел предел, но и выглядел очень плохо для босса, который думал, что я могу добавить все четыре таблицы (каждая с более чем 900 000 строк) в одну большую таблицу. реальный результат состоял в том, что независимо от того, сколько раз я пробовал Таблицу (в которой было ровно 34 столбца - 30 текстовых и 3 целых числа), появлялось какое-то загадочное сообщение «Невозможно открыть базу данных нераспознанным форматом, или файл может быть поврежден». Итог - менее 1 500 000 записей и чуть более 1 252 000 с 34 строками.

0 голосов
/ 17 мая 2012

Практический = «полезный на практике» - поэтому лучшее, что вы получите, - это анекдотично. Все остальное - просто результаты прототипирования и тестирования.

Я согласен с другими - определение «максимального количества записей» полностью зависит от схемы - # таблиц, # полей, # индексов.

Еще один анекдот для вас: я недавно выбрал размер файла 1,6 ГБ с 2 первичными хранилищами данных (таблицами), 36 и 85 полями соответственно, с некоторыми подмножествами копий в 3 дополнительных таблицах.

Кому интересно, уникальны ли данные или нет - только материал, если контекст говорит, что это так. Данные есть данные, есть данные, если только дублирование не влияет на обработку индексатором.

Общее количество строк, составляющих 1,6 ГБ, составляет 1,72 млн.

0 голосов
/ 03 августа 2009

Все зависит. Теоретически используется один столбец с 4-байтовым типом данных. Вы можете хранить 300 000 строк. Но, вероятно, в базе данных много служебных данных даже до того, как вы что-то сделаете. Я читал где-то, что у вас может быть 1.000.000 строк, но опять же, все зависит

Вы также можете связать базы данных вместе. Ограничение только дискового пространства.

...