Утилиты·Объём и масса

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

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

Параметры таблицы Ожидаемое количество строк в таблице
Поля таблицы
Дополнительные параметры
Справочная таблица размеров типов данных
Тип Размер Описание
TINYINT 1 0–255
SMALLINT 2 0–65 535
INT 4 0–4,3 млрд
BIGINT 8 До 18,4 квинтиллионов
FLOAT 4 Число с плавающей точкой
DOUBLE 8 Двойная точность
DATE 3 Дата
TIMESTAMP 4 Дата и время (до 2038)
DATETIME 5 Дата и время
BOOLEAN 1 TRUE/FALSE
VARCHAR(n) n символов × 1–4 байта

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

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

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

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

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

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

Обозначение Название Байт (десятичная) Байт (двоичная)
Б (B) Байт 1 1
КБ (KB) Килобайт 1 000 1 024
МБ (MB) Мегабайт 1 000 000 1 048 576
ГБ (GB) Гигабайт 1 000 000 000 1 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 байт на запись

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

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

Тип Байт Максимальное значение
TINYINT 1 255
SMALLINT 2 65 535
INT (INTEGER) 4 4 294 967 295
BIGINT 8 18 446 744 073 709 551 615
FLOAT 4 ~3,4 × 10³⁸
DOUBLE 8 ~1,8 × 10³⁰⁸
DECIMAL(p,s) ~p/2 зависит от точности

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


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

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


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

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

Даты и время

Тип Размер (байт) Диапазон
DATE 3 1000-01-01 → 9999-12-31
TIME 3–4 −838:59:59 → +838:59:59
DATETIME 5–8 1000-01-01 00:00:00 → 9999-12-31 23:59:59
TIMESTAMP 4 1970-01-01 00:00:00 UTC → 2038-01-19
YEAR 1 1901 → 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 записей:

Поле Тип Длина/значения Размер (байт)
id BIGINT автоинкремент 8
name VARCHAR 50 символов (UTF-8, кириллица) 100
email VARCHAR 100 символов (ASCII) 100
phone VARCHAR 20 символов (ASCII) 20
birth_date DATE 3
created_at DATETIME 5
is_active TINYINT 0/1 1
Итого на строку 237

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


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

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


23 МБ × 1,3 ≈ 30 МБ

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

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

Поле Тип Размер (байт)
id BIGINT 8
user_id BIGINT 8
page_url VARCHAR(200) 400
ip_address VARCHAR(45) 45
user_agent VARCHAR(255) 255
timestamp TIMESTAMP 4
Итого 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

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

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

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

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

Как рассчитать объем строки в байтах?
Объем строки зависит от кодировки. 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 для чисел.