Сколько в 1С?...

...Объем справочника
...Метод Новый()
...Объем базы
...Выводы

В конференции f1csoft проскочил интересный вопрос:

>Сколько по максимуму влезает в справочник в 1с? А если с группами?

Вопрос оказался интереснее, чем казалось вначале. Сначала немного общеизвестных фактов.

В 1С:Предприятии:

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

Итак, вопрос "сколько элементов по максимуму влезает в 1С" можно разбить по крайней мере на три подвопроса:

а) сколько раз можно вызывать метод Новый()?
б) сколько записей может храниться в базе?
в) сколько записей может храниться без потери производительности 1С?

  Сколько раз можно вызвать метод Новый()

1. Рассмотрим пользовательский код.

Предположим, что контроль уникальности кодов включен. Предположим, что включена уникальность кодов во всем справочнике. Максимальное число элементов, которые можно записать с помощью самого длинного кода = 98^25-1 что примерно равно 6.03E+49.

Где 98 - количество допустимых символов в коде, а 25 это максимальная длина кода + 1.

Получается, что пользовательского кода - хватит на очень много. Если задать уникальность в пределах группы - то будет еще на 10 порядков больше.

Пока хорошо.

Рассмотрим справочники, которые предлагаются по умолчанию. Длина кода по умолчанию - 5, включено числовое представление. Обычно в типовых конфигурациях торговли включена уникальность в пределах всего справочника. Это значит, что всего можно ввести 99999 элементов.

Обычно в типовых конфигурациях бухгалтерии включена уникальность в пределах подчинения и используется 3 уровня вложенности. Это значит, что максимальное число элементов может достигать (10^5-1)^3 это примерно равно 10^15.

Вывод по пункту 1: вроде пока достаточно. Если достигли максимального значения кода, то всегда можно увеличить длину кода.

2. Рассмотрим ID

Поскольку ID уникален в пределах всего справочника, то максимальное элементов, кодируемое полем ID в 7.7 = 36^7-1  это равно 78 364 164 095. Т.е. около 80 миллиардов элементов.

Где 36 - количество допустимых символов в коде, а 7 это максимальная длина кода + 1.

Вывод по пункту 2: максимальное количество элементов уже вполне представимое. Оно конечно больше, чем 99999, предлагаемых в Торговле по умолчанию, но уже существенно меньше максимального числа элементов, для
справочников из типовой Бухгалтерии.

3. Попробуем представить что же такое 80 миллиардов элементов...

3.1. ...с точки зрения времени.

Пусть за одну секунду создается один новый элемент справочника и еще за одну секунду удаляется предыдущий элемент (чтобы диск не переполнился). Тогда для того, чтобы достигнуть максимального значения поля ID потребуется около 4970 лет непрерывной работы.

3.2. ...с точки зрения необходимого пространства на диске.

Пусть имеется справочник с кодом, длиной 5 символов и наименованием,   длиной 25 символов (значения по умолчанию). Чтобы достигнуть максимального значения ID установим 10 уровней вложенности .

Размер записи этого справочника в 4м релизе 7.7 = 56 байт. Для хранения 80ти миллиардов таких элементов потребуется около 4087 GB на диске. Т.е. около 4 терабайт (это не считая индексов).

Выводы:

а) в 1С:Предприятии есть системное ограничение на максимальное количество элементов. В справочнике принципиально не может содержаться более 80 миллиардов  элементов.

б) вряд ли кто реально столкнется с этим ограничением в реальном будущем.

в) ограничение на максимальное количество элементов не является  принципиальным. 1С достаточно легко сможет увеличить длину поля ID в любое время.

г) код, вводимый пользователем не является ограничением на максимальное количество элементов.

 

  Сколько записей может храниться в базе

1. DBF

Максимальное количество одновременно хранимых записей для DBF, указанных в документации Clipper'а и FOX'а - 1 миллиард. 1С использует библиотеку CodeBase. Думаю, что и там такое же ограничение.

2. SQL

В SQL нет ограничения на количество записей. Там есть ограничение на количество страниц в пределах одного устройства (device). Каждая страница может содержать несколько записей. Поскольку параметров много, то для SQL сложно дать точный максимум записей. Мне хотелось бы предложить методику и очень примерно оценить верхний предел для типовых справочников.

Максимальное количество страниц для MS SQL - 16 777 216. Размер каждой страницы:

Кроме того MS SQL хранит служебную информацию о начале записи в странице. Но я не буду учитывать эти значения. Оценка максимума усложняется еще тем, что индексы хранятся в на том же устройстве, что и база данных. А максимальный размер устройства задается администратором.

Итак, введем параметр "Количество записей в странице" (Кзап),

Кзап = int(размер_страницы / размер_записи),

где

размер_записи равна сумма длины полей, определенных в конфигураторе (можно посмотреть в DD-файле).

Для справочника с параметрами по умолчанию размер_записи = 56 байт. Максимальное количество записей с параметрами по умолчанию:

Размер_записи для справочника контрагентов в типовой Бухгалтерии = 448 байт. Максимальное количество контрагентов:

 

  Выводы:

Для DBF - максимальное количество записей 1 млрд., для SQL - максимальное количество записей зависит от размера элемента справочника и может изменяться от 16 777 216 до нескольких миллиардов.

 

  Сколько записей может храниться без потери производительности

Хотелось бы обсудить в статье "Тесты в 1С...".

Rambler's Top100 Рейтинг@Mail.ru
Телефон: (095) 937-72-84
Адрес для связи: Мазуркин Сергей mazzy@mazzy.ru
Вся контактная информация