Расчет объема данных

Что такое объем данных

Объем данных – это количество информации, хранимой в цифровом виде, измеряемое в байтах и их производных (килобайтах, мегабайтах, гигабайтах, терабайтах). В отличие от статистического понятия «объем выборки» (количество наблюдений), расчет объема данных в IT означает оценку места на диске или в памяти, которое займет набор значений.

Зачем нужен такой расчет:

  • Проектирование хранилища – перед развертыванием БД или файловой системы
  • Планирование ресурсов – оценка стоимости облачного хранилища
  • Оптимизация запросов – понимание, сколько данных помещается в оперативную памяти
  • Собеседования – задачи на оценку масштабов систем

Единицы измерения

Система единиц измерения объема данных использует степени числа 1024 (для двоичной системы) и 1000 (для десятичной). В документации производителей накопителей и провайдеров обычно используется десятичная система (1 ГБ = 1000³ байт), тогда как операционные системы часто показывают двоичную (1 ГБ = 1024³ байт, называемый гибибайтом).

ОбозначениеНазваниеБайт (десятичная)Байт (двоичная)
Б (B)Байт11
КБ (KB)Килобайт1 0001 024
МБ (MB)Мегабайт1 000 0001 048 576
ГБ (GB)Гигабайт1 000 000 0001 073 741 824
ТБ (TB)Терабайт10¹²2⁴⁰

Для упрощения расчетов в быстрой оценке используют степени 1000. При точных вычислениях – степени 1024.

Формулы расчета объема данных

Строковые данные (текст, VARCHAR)

Формула расчета для строки:


объем*строки = количество*символов × байт*на*символ

UTF-8 кодирует символы переменным количеством байт:

  • ASCII (латиница, цифры, базовые знаки) – 1 байт
  • Кириллица, латиница с диакритикой – 2 байта
  • Символы CJK (китайский, японский) – 3 байта
  • Emoji и редкие символы – 4 байта

Для консервативной оценки используйте 4 байта на символ (максимум UTF-8). Для текста на русском языке – 2 байта.

Пример: поле «ФИО клиента», средняя длина 30 символов, русский текст:


30 символов × 2 байта = 60 байт на запись

Числовые типы данных

Размер числа зависит от его диапазона:

ТипБайтМаксимальное значение
TINYINT1255
SMALLINT265 535
INT (INTEGER)44 294 967 295
BIGINT818 446 744 073 709 551 615
FLOAT4~3,4 × 10³⁸
DOUBLE8~1,8 × 10³⁰⁸
DECIMAL(p,s)~p/2зависит от точности

Формула определения необходимого размера:


минимальный*размер = ceil(log₂(максимальное*значение + 1) / 8)

Пример: поле «возраст клиента», максимальное значение 150:


минимальный_размер = ceil(log₂(151) / 8) = ceil(7,23 / 8) = 1 байт

Достаточно TINYINT (1 байт).

Даты и время

ТипРазмер (байт)Диапазон
DATE31000-01-01 → 9999-12-31
TIME3–4−838:59:59 → +838:59:59
DATETIME5–81000-01-01 00:00:00 → 9999-12-31 23:59:59
TIMESTAMP41970-01-01 00:00:00 UTC → 2038-01-19
YEAR11901 → 2155

В MySQL DATETIME занимает 5 байт без микросекунд, 8 байт с микросекундами.

Булевы значения

Булевы значения в большинстве СУБД хранятся как 1-байтовое целое число (0 или 1). В некоторых системах (например, PostgreSQL с типом boolean) используется 1 байт с тремя состояниями: TRUE, FALSE, NULL.

Перечисления (ENUM)

Перечисления обычно занимают 1–2 байта в зависимости от количества вариантов:

  • ≤ 255 значений – 1 байт
  • ≤ 65 535 значений – 2 байта

Практические примеры расчета

Пример 1: Таблица клиентов

База данных интернет-магазина, таблица customers на 100 000 записей:

ПолеТипДлина/значенияРазмер (байт)
idBIGINTавтоинкремент8
nameVARCHAR50 символов (UTF-8, кириллица)100
emailVARCHAR100 символов (ASCII)100
phoneVARCHAR20 символов (ASCII)20
birth_dateDATE3
created_atDATETIME5
is_activeTINYINT0/11
Итого на строку237

Общий объем данных без индексов:


237 байт × 100 000 = 23 700 000 байт ≈ 23 МБ

С учетом накладных расходов СУБД (≈30%):


23 МБ × 1,3 ≈ 30 МБ

Пример 2: Логи посещений

Таблица веб-аналитики, 1 000 000 записей в день:

ПолеТипРазмер (байт)
idBIGINT8
user_idBIGINT8
page_urlVARCHAR(200)400
ip_addressVARCHAR(45)45
user_agentVARCHAR(255)255
timestampTIMESTAMP4
Итого720

За день:


720 байт × 1 000 000 = 720 000 000 байт ≈ 720 МБ

За месяц (30 дней):


720 МБ × 30 ≈ 21,6 ГБ

Пример 3: Расчет объема JSON-данных

Документ профиля пользователя в NoSQL (MongoDB):

{
  "user_id": "650a2...",
  "name": "Иван Петров",
  "email": "ivan@example.com",
  "preferences": {
    "theme": "dark",
    "notifications": true,
    "language": "ru"
  },
  "orders_count": 42,
  "last_login": "2024-01-15T10:30:00Z"
}

Расчет объема строки (json):

Символы (с пробелами): ~200
UTF-8 (русский + базовые): ~1,5 байта/символ в среднем
Итого: ~300 байт на документ

При 1 миллионе пользователей:

300 байт × 1 000 000 ≈ 300 МБ (без индексов)

Дополнительные факторы

Индексы

Индексы значительно увеличивают объем хранимых данных. Простой индекс на одно поле обычно занимает 30–50% от размера самого поля на каждую строку. Составной индекс пропорционален сумме размеров полей.

Правило: полный индекс на все поля таблицы удваивает её размер.

Репликация

При использовании репликации (Master-Slave, MongoDB Replica Set) объем умножается на количество копий:

  • 2 реплики – ×2
  • 3 реплики – ×3
  • Кворум 3 из 5 – ×3

Сжатие

Коэффициент сжатия зависит от типа данных:

  • Текстовые данные: 0,3–0,5 (экономия 50–70%)
  • Числовые данные: 0,8–0,9 (экономия 10–20%)
  • Индексы: 0,6–0,8 (экономия 20–40%)
  • JSON/Logs: 0,2–0,4 (экономия 60–80%)

Резервные копии

Резервные копии обычно занимают:

  • Без сжатия: размер базы данных × 1
  • Со сжатием (gzip): размер БД × 0,3–0,5
  • Инкрементные: зависят от частоты изменений

Быстрая оценка: множители для запоминания

Для грубой оценки объема данных используйте следующие коэффициенты:

Тип данныхОценка на запись
Строка текста (короткая)10–50 байт
Строка текста (длинная)100–500 байт
Числовое поле4–8 байт
Дата/время4–8 байт
Булево поле1 байт
Средняя строка БД50–200 байт

Формула быстрой оценки таблицы:

объем_МБ = количество_строк × средний_размер_строки_байт / 1 000 000

Затем добавьте:

  • Индексы: ×1,5–2,0
  • Репликация: ×количество_реплик
  • Сжатие текста: ×0,5

Калькулятор объема данных

Для точного расчета используйте калькулятор – введите количество записей и типы полей, получите оценку объема с учетом индексов и репликации.

Параметры таблицы Ожидаемое количество строк в таблице
Поля таблицы
Дополнительные параметры
Справочная таблица размеров типов данных
ТипРазмерОписание
TINYINT10–255
SMALLINT20–65 535
INT40–4,3 млрд
BIGINT8До 18,4 квинтиллионов
FLOAT4Число с плавающей точкой
DOUBLE8Двойная точность
DATE3Дата
TIMESTAMP4Дата и время (до 2038)
DATETIME5Дата и время
BOOLEAN1TRUE/FALSE
VARCHAR(n)n символов × 1–4 байта

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

Часто задаваемые вопросы

Как рассчитать объем строки в байтах?
Объем строки зависит от кодировки. UTF-8: латиница 1 байт/символ, кириллица 2 байта/символ, emoji до 4 байт. Для оценки используйте среднюю длину × размер одного символа.
Сколько байт занимает целое число?
INT в большинстве БД – 4 байта (диапазон −2,1 млрд до +2,1 млрд). TINYINT – 1 байт, SMALLINT – 2 байта, BIGINT – 8 байт.
Как оценить размер всей таблицы в базе данных?
Размер таблицы = сумма размеров всех строк × количество строк. Учитывайте накладные расходы БД (индексы, метаданные) – обычно +20–40% к размеру данных.
Нужно ли учитывать сжатие при расчете объема?
Да. Сжатие текстовых данных (строки, логи) дает 50–70% экономии. Числовые данные и индексы сжимаются плохо – 10–20%. Используйте коэффициент 0,5 для текста и 0,9 для чисел.