Рубрики
Технологии

Почему JSON на самом деле — быстрый формат для баз данных (если выкинуть лишние абстракции)

Мы привыкли считать JSON «медленным» текстовым форматом, удобным исключительно для людей. Мы используем его для REST API, конфигурационных файлов и веб-интерфейсов, но как только речь заходит о высоконагруженных базах данных, мы сразу же смотрим в сторону Protocol Buffers, FlatBuffers или проприетарных бинарных форматов.

Но что, если взглянуть на JSON не с человеческой стороны, а со стороны машины?

Если убрать тяжелые слои абстракций (такие как рефлексия Go и сетевые оверхеды), стандартный JSON оказывается удивительно плотным, прозрачным и невероятно быстрым в обработке. На его основе можно построить встраиваемый Key-Value движок, который выполняет чтение за 16 наносекунд, а поиск — менее чем за 0.5 миллисекунды на базе в миллион записей.

В этой статье мы разберем, как это реализовано в MakoDB (безсерверной NoSQL СУБД на Go, работающей через memory-mapped файлы).

## 📊 Бенчмарки (Железо: AMD Ryzen 9 7950X3D)

Поскольку MakoDB хранит и обрабатывает данные в виде «сырых» JSON-документов, вот показатели задержки (latency) и пропускной способности под параллельной нагрузкой в 32 потока:

| Операция | Задержка (ns/op) | Пропускная способность | Аллокации памяти | Описание |

| :— | :— | :— | :— | :— |

| Get | 16.78 ns | ~60 000 000 ops/sec | 0 B/op | Параллельное чтение (Lock-Free) |

| Query | 27.97 ns | ~35 000 000 ops/sec | 0 B/op | Выборка полей из JSON без десериализации |

| Put | 484.50 ns | ~2 060 000 ops/sec | 0 B/op | Параллельная запись (16 шардов) |

| Search | 71.88 μs | ~14 000 ops/sec | 600 KB/op | Полнотекстовый поиск AND (1000 совпадений) |

Погрузиться в наносекунды и код