
Почему JSON на самом деле — быстрый формат для баз данных (если выкинуть лишние абстракции)
ihar76 5 минут назад Почему JSON на самом деле — быстрый формат для баз данных (если выкинуть лишние абстракции) Средний 6 мин 1 Go * Базы данных * Высоконагруженные системы * Системное программирование * Ненормальное...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Значимый прорыв формирует отрасль ИИ: ihar76 5 минут назад Почему JSON на самом деле — быстрый формат для баз данных (если выкинуть лишние абстракции) Средний 6 мин 1 Go * Базы данных * Высоконагруженные системы * Системное программирование * Ненормальное программирование * Кейс Мы привыкли считать 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)Пропускная способностьАллокации памятиОписаниеGet16. 78 ns~60 000 000 ops/sec0 B/opПараллельное чтение (Lock-Free)Query27.
97 ns~35 000 000 ops/sec0 B/opВыборка полей из JSON без десериализацииPut484. 50 ns~2 060 000 ops/sec0 B/opПараллельная запись (16 шардов)Search71. 88 μs~14 000 ops/sec600 KB/opПолнотекстовый поиск AND (1000 совпадений)Примеры кода MakoDB: как это работаетMakoDB поставляется в виде встраиваемой библиотеки (daemonless).
Вы просто импортируете её в проект на Go, открываете файл базы данных и начинаете работать. Инициализация базы данных// Открываем или создаем базу: путь, количество шардов, макс. размер файла, buckets на шард db, err := makodb.
Отраслевые последствия
db", 16, 15*1024*1024*1024, 6250000) if err ! Запись (Put) и Lock-Free чтение (Get)// 1. Запись документа key := "user:101" jsonDoc := byte(`{"name":"Mako","age":25,"city":"Ocean","role":"admin"}`) err := db.
Put(key, jsonDoc) // 2. Чтение документа (Lock-Free) val, err := db. Printf("Document: %s", string(val)) 3.
Проекция схем (Query) без полной десериализацииMakoDB интегрирован с парсером silentjson, который умеет вытягивать конкретные поля прямо из сырых байт JSON в памяти без парсинга всего документа. Это позволяет делать до 35 000 000 запросов в секунду:type UserAgeQuery var result UserAgeQuery // Проецирует только указанные поля напрямую из JSON-байтов err := db. Query("user:101", &result) 4.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





