
In-memory базы данных для IoT и edge computing
27 августа 2026 г.

IoT-системы давно перестали быть только источником телеметрии для центрального хранилища. В промышленности, энергетике, транспорте и телекоме часть решений нужно принимать рядом с оборудованием: отбраковать аномальный сигнал, остановить линию, изменить режим контроллера, отдать команду шлюзу, сохранить локальный журнал событий на случай потери канала. В такой архитектуре база данных для IoT оказывается частью управляющего контура.
In-memory база данных и edge computing закрывают разные стороны одной инженерной задачи: первая снижает задержку доступа к горячим данным, второй переносит обработку ближе к датчикам, контроллерам, промышленным шлюзам и узлам MEC. Облако при этом не исчезает — оно остаётся контуром для долгосрочной аналитики, обучения моделей, управления парком устройств и отчётности. Но события, от которых зависит локальная реакция, часто нельзя ждать через весь маршрут до центрального региона.
Здесь возникает практический вопрос: какая edge computing база данных подходит для real-time обработки данных IoT, если поток событий идёт постоянно, память на узле ограничена, сеть нестабильна, а часть данных нужно сохранять после перезапуска? In-memory СУБД даёт низкую задержку доступа к рабочему набору, но сама по себе не решает вопросы персистентности, репликации, шардирования и эксплуатации. Для архитектуры важен весь набор свойств: модель данных, индексы, WAL, снэпшот, восстановление, мониторинг, поведение при отказах и способ синхронизации с центром.
Tarantool DataBase в таких сценариях интересен тем, что объединяет in-memory engine, персистентность через WAL и снэпшоты, Lua-рантайм для прикладной логики рядом с данными, репликацию и шардинг через vshard. Выбирать его стоит не потому, что всё в памяти быстрее, а по соответствию конкретным требованиям: допустимая задержка, профиль записей, объём горячего состояния, требования к восстановлению, топология edge-узлов и способ синхронизации с центром.
Почему обычная СУБД не справляется с IoT-нагрузкой
В классическом пути в телеметрии устройство публикует событие в брокер, брокер отправляет поток в центр, центральная платформа сохраняет и анализирует данные. Эта схема хороша для исторической аналитики и централизованного управления, но плохо подходит для контуров, где задержка сети или разрыв связи меняют результат.
В промышленном IoT типичные события — это измерения вибрации, температуры, давления, потребления энергии, состояния приводов, ошибок ПЛК, данных с камер технического зрения, координат транспорта, сетевой телеметрии. Поток может быть неравномерным: стабильная нагрузка в штатном режиме и резкие пики при авариях, пусках, переключениях или массовой переподписке устройств. 1000 устройств, каждое из которых отправляет 10 событий в секунду, дают 10 000 операций приёма в секунду на один шлюз. Если каждое событие превращается в синхронную запись на диск и последующий запрос в центральный сервис, узким местом быстро становятся I/O и сеть.
Edge-узел часто выполняет несколько функций одновременно: принимает поток от устройств, хранит текущее состояние, считает агрегаты по окнам, дедуплицирует события, проверяет правила, буферизует запись в центр, обслуживает локальные API и синхронизирует состояние после восстановления связи. Для этого нужна база, которая выдерживает частые записи, быстрые чтения по ключам и индексам, локальное восстановление после перезапуска и наблюдаемость.
Проблема latency при записи на диск
Традиционная дисковая СУБД может работать с большой IoT-нагрузкой при правильном проектировании: батчировать запись, подобрать индексы, настроить WAL, вынести холодные данные и измерить профиль I/O. Но в edge-сценарии часто нет пространства для тяжёлой инфраструктуры: узел ограничен по CPU, RAM, диску, сети и обслуживанию. Если каждый обработчик события ожидает удалённый round trip, задержка становится частью бизнес-процесса.
In-memory СУБД снижает latency доступа к рабочему набору: устройство, последнее состояние, активные аварии, короткие окна дедупликации и локальные правила находятся в RAM. Это не означает работу без диска и не отменяет durability. Корректная архитектура использует память как основной слой доступа, а долговечность обеспечивает через журналирование, снимки состояния, репликацию или комбинацию этих механизмов.
В Tarantool DataBase за это отвечают WAL-файлы .xlog и снэпшот-файлы .snap: изменения записываются в write-ahead log, а снимки дают on-disk копию набора данных на момент времени. При восстановлении Tarantool загружает последний снэпшот и применяет записи WAL, созданные после него.
Edge-узел: ограниченные ресурсы, максимальные требования
Edge-устройство может быть промышленным шлюзом, ruggedized mini-PC, сервером на площадке или узлом оператора связи. У него есть локальная близость к источнику данных, но есть и ограничения: RAM и диск конечны, канал до центра нестабилен, обслуживание сложнее, чем в дата-центре. Поэтому edge computing база данных должна быть быстрой и предсказуемой в эксплуатации.
Для edge-узла нужно заранее ответить на вопросы: сколько памяти выделено под tuples, индексы и соединения; сколько WAL поместится на локальном диске; как долго узел может работать offline; что произойдёт при заполнении буфера; сколько времени займёт восстановление после перезапуска. Если эти параметры не определены, in-memory слой превращается из ускорителя в риск: данные поступают быстрее, чем система успевает их сохранять, выгружать или удалять.
Как устроены in-memory базы данных
In-memory база данных хранит рабочий набор в оперативной памяти. Для IoT это особенно полезно там, где горячее состояние невелико по сравнению с историей: последние значения датчиков, состояние устройств, активные аварии, текущие сессии, конфигурации, локальные агрегаты, окна дедупликации, очереди команд.
Такой подход обеспечивает снижение задержки операций с часто используемыми данными. В edge-сценариях это влияет на пользовательский API и внутренний цикл обработки: принять событие, найти устройство, проверить конфигурацию, обновить состояние, записать факт, отдать решение. Если каждый шаг требует обращения к диску или удалённому сервису, задержка накапливается.
Персистентность in-memory базы в Tarantool DataBase построена на двух механизмах. WAL (.xlog) хранит журнал изменений, снэпшот (.snap) — копию набора данных на момент времени. После сбоя memtx восстанавливается из последнего снэпшота и WAL-файлов, записанных после него; в процессе восстановления Tarantool заново формирует индексы в памяти.
Это важно для DevOps: чем реже снэпшоты, тем дольше потенциальное восстановление, потому что нужно применить больше WAL. Чем чаще снэпшоты, тем выше фоновая нагрузка на диск и I/O. Поэтому интервалы checkpoint и лимиты WAL подбирают по фактической скорости записи, размеру данных и целевому времени восстановления.
Memtx и Vinyl: горячий и дисковый контуры
Tarantool поддерживает два storage engine:
- memtx — in-memory engine и engine по умолчанию;
- vinyl — on-disk engine, который подходит, когда база больше доступной RAM и расширять память нецелесообразно.
Для IoT так можно разделить модель: горячее состояние и контуры реакции хранить в memtx, а более объёмные локальные данные — в vinyl или внешнем хранилище, если профиль нагрузки и требования к задержке это допускают.
Эти роли нельзя смешивать. vinyl — не такой же RAM-движок с большим объёмом. Это дисковый слой с другим профилем задержки и I/O. Его можно использовать для локального backlog, справочников или менее горячих данных, но критичный контур реакции лучше держать в memtx и подтверждать нагрузочными тестами.
Индексы в памяти: hash, tree и другие паттерны доступа
В IoT типичны запросы разных форм: получить устройство по device_id, найти активные аварии по площадке, выбрать события за диапазон времени, проверить битовые флаги состояния, найти устройства в зоне по координатам. Под каждый из них нужен подходящий индекс, и выбор индекса влияет на latency не меньше, чем объём RAM.
В Tarantool DataBase индекс TREE — тип по умолчанию. TREE поддерживается memtx и vinyl, подходит для уникальных и неуникальных значений, частичного поиска по ключу, сравнений и упорядоченных результатов. Дополнительно memtx поддерживает HASH, RTREE и BITSET. Вот в чем их разница:
- TREE — базовый выбор для большинства ключей, диапазонов времени и составных индексов.
- HASH оправдан для точечного доступа по ключу, но только после замеров.
- RTREE применяют для пространственных данных.
- BITSET — для флагов и масок состояний.
Если обработчик каждого события ищет по неиндексированному полю или делает широкую выборку, никакой объём RAM не удержит задержку на пиках.
Lua-хранимые процедуры: логика рядом с данными
В Tarantool DataBase прикладную логику можно выполнять прямо внутри процесса через Lua. При входящем событии одна локальная транзакция обновит состояние устройства, проверит порог, запишет активную аварию, обновит агрегат и положит команду в очередь отправки — без сетевых переходов между микросервисами на edge-узле. Это удобно для нормализации единиц измерения, дедупликации, проверки порогов, расчёта скользящих агрегатов и маршрутизации событий. Такую логику нужно проектировать аккуратно: версионировать код, покрывать тестами, ограничивать долгие операции и выводить прикладные метрики — иначе база рискует превратиться в непрозрачный монолит.
Архитектура edge-решения от датчика до облака
Практичная IoT-архитектура обычно делит данные и функции по времени реакции:
- Edge: датчики, PLC, счётчики, камеры, шлюзы протоколов MQTT, OPC UA, Modbus и локальный контур принятия решений.
- Fog / near-edge: промышленные серверы, MEC-узлы или региональные edge-кластеры, где выполняются локальная обработка, агрегация, хранение горячих состояний и буферизация.
- Cloud / central platform: долгосрочное хранение, BI, ML, управление парком устройств, управление версиями конфигураций, аудит и интеграции.
Такой разрез помогает выбрать, какие данные держать в in-memory СУБД на edge, какие сбрасывать на диск локально, а какие отправлять в центр. Последние значения 200 000 датчиков и активные аварии логично держать в памяти, если расчёт RAM и индексов это подтверждает, а вот сырые показания за несколько лет туда не кладут — для них лучше подойдёт потоковая доставка в центральное хранилище или локальный on-disk слой с политикой retention.
Роль Tarantool на edge-узле
Ниже пример логической схемы для промышленного узла или телеком-edge. Это не единственный вариант, но он показывает место Tarantool DataBase в цепочке обработки и где возникает edge database latency.

В такой схеме Tarantool не обязан быть единственным компонентом. Обычно рядом есть брокер сообщений, агент мониторинга, адаптеры промышленных протоколов, сервис управления конфигурациями и механизм доставки в центр. Роль Tarantool IoT-узла — хранить и обрабатывать локальное состояние с малой задержкой, а также давать понятный путь восстановления после перезапуска.
Партицирование, TTL и управление объёмом на edge
Хранить данные на edge-узле бесконечно не получится. Для горячего состояния нужно заранее считать RAM: tuples, индексы, Lua heap, соединения, фоновые процессы, запас на пики и контейнерные лимиты. Параметр memtx.memory в Tarantool задаёт объём памяти только для tuples — индексы и соединения используют память сверх этого.
Управление объёмом — обязательная часть дизайна. Типовые механизмы:
- TTL для записей, которые нужны только короткое время;
- скользящее агрегирование: сырые события превращаются в минутные или часовые метрики;
- tiered storage: горячие в memtx, менее горячие данные в vinyl или внешнем хранилище;
- явная политика при заполнении backlog: остановить приём, снижать детализацию, удалять низкоприоритетные данные или поднять аварию.
Отдельно стоит избегать хранения неограниченных списков событий внутри одного tuple. Массив последних 100 000 значений в одной записи увеличивает размер tuple, усложняет обновление и раздувает WAL. Лучше моделировать ограниченные окна или отдельные records с retention.
Работа в offline-режиме
При разрыве связи локальная система продолжает принимать события до лимита буфера. Когда лимит приближается, политика должна быть заранее определена: остановить приём, удалять низкоприоритетные данные, агрегировать сильнее, сбрасывать на локальный диск или поднимать аварийный сигнал. Это архитектурное решение, а не свойство конкретной СУБД.
Для Tarantool DataBase здесь полезны транзакции и индексы по статусу очереди. Долговечность очереди зависит от режима WAL и диска. Если событие считается принятым только после записи в WAL с нужными гарантиями, это нужно отразить в SLA и тестах. Если подтверждение устройству отправляется до durable-записи, возможна потеря при отказе.
Репликация помогает повысить доступность внутри площадки. В Tarantool репликация построена вокруг передачи изменений из WAL; по умолчанию используется асинхронная репликация, также доступна синхронная. Асинхронная схема снижает влияние сетевой задержки между репликами, но допускает окно, в котором подтверждённые на master изменения ещё не доехали до replica. Синхронная репликация уменьшает такой риск для подтверждаемых транзакций, но добавляет зависимость от кворума и сети.
Для наблюдения за репликацией Tarantool предоставляет box.info.replication, где есть статистика по экземплярам replica set, включая LSN, upstream/downstream status, lag и другую информацию.
Сравнение in-memory СУБД для IoT-сценариев
| Критерий | Tarantool DataBase | Redis | Apache Ignite | SQLite (edge) |
| Основная модель | In-memory СУБД с persistent storage, Lua-логикой, spaces и индексами | In-memory key-value / data structures server | Распределённая in-memory computing/data grid платформа | Встраиваемая on-disk SQL-библиотека |
| Типичный edge-профиль | Локальное operational state: key-value доступ, вторичные и геоиндексы, флаги, транзакции и серверная логика; для edge-шлюзов с цифровыми двойниками, обработкой событий, авариями и восстановлением после перезапуска | Key-value доступ, счётчики, очереди, временные буферы и структуры данных; простая логика обработки, с учётом hash slots при multi-key операциях в кластере | Распределённое хранение, SQL и вычисления рядом с данными; для ресурсного edge-кластера с потребностью в colocated execution и MapReduce | Локальное встраиваемое хранение на устройстве или gateway |
| Персистентность | Поддерживается.Хранение в memtx с восстановлением из snapshot и WAL; vinyl для объёмных менее горячих данных; выбор WAL-режима между строгой durability (fsync) и низкой задержкой (write). | Поддерживается. Выбор между RDB-снимками, AOF или их комбинацией; баланс RPO, скорости восстановления и нагрузки: RDB быстрее восстанавливает большие наборы, AOF сокращает возможную потерю данных | Поддеживается, но зависит от конфигурации storage. Volatile или persistent storage; для persistence нужны настройка памяти, WAL, диска и восстановления, а in-memory режим теряет данные после остановки кластера. | поддерживается. Файл БД, транзакции, WAL mode SQLite |
| Поддерживаемые индексы и запросы | Индексы TREE, HASH, BITSET и RTREE для диапазонов, ключей, флагов и геоданных; локальный поиск устройств, аварий и событий без внешнего поискового компонента | Key-value доступ и специализированные структуры данных; сложный поиск и вторичные индексы зависят от выбранных модулей и редакции продукта | Распределённые SQL-таблицы и вторичные индексы. Подходит для реляционных запросов по распределённому набору данных | SQL и B-tree-индексы в рамках локального файла базы; хорошо подходит для одиночного встроенного приложения |
| Реализация горизонтальногомасштабирования | vshard распределяет виртуальные buckets между replica sets; router маршрутизирует запросы, rebalancer балансирует данные при изменении топологии; подходит для шардирования по device_id, site_id или tenant_id | Redis Cluster распределяет ключи по 16 384 hash slots; эффективен для single-key запросов, а multi-key операции требуют колокации ключей в одном slot. | Данные распределяются по partitions и distribution zones; есть механизмы колокации данных и выполнения вычислений на соответствующих узлах. | Не предназначен для распределённого кластера |
| Встраивание бизнес-логики рядом с данными | Lua stored logic внутри Tarantool-процесса | Lua scripting / functions, чаще как операции над структурами | Compute grid / services | Логика в приложении |
| Где особенно уместен | Edge-gateway с горячим состоянием, локальной обработкой и требованиями к recovery | Быстрый кэш/буфер, простые low-latency структуры | Распределённые вычисления и крупный кластер при достаточных ресурсах | Локальная embedded база без отдельного сервера |
Если вы проектируете IoT-контур, где нужно хранить горячее состояние рядом с устройствами, обрабатывать события локально и восстанавливаться после перезапуска, начните с короткого прототипа: 2–3 реальных типа событий, фактическая частота записи, выбранные индексы, нужный WAL mode, тест потери питания или kill процесса, измерение recovery time и p95/p99 задержек на целевом железе.
Паттерны использования Tarantool DataBase в IoT
Буфер между брокером сообщений и облаком
MQTT-брокер принимает события от устройств, Tarantool-воркер вычитывает поток, валидирует схему, записывает состояние в memtx, применяет дедупликацию и нормализацию единиц измерения, а затем асинхронно выгружает данные в облачное хранилище батчами. Облако получает подготовленные события, а edge продолжает работать при временной недоступности центрального контура.
Для такого паттерна нужны индексы по статусу отправки и времени создания, отдельная политика retention (хранения) и алерты по возрасту старшей записи в очереди. Если бэклог растёт быстрее, чем канал успевает выгружать данные, это должно быть видно до заполнения диска.
Скользящее окно и детектирование аномалий
Tarantool хранит последние N событий по каждому устройству или агрегаты за короткие интервалы. Lua-процедура считает скользящее среднее, счётчики или пороговые правила рядом с данными. При превышении порога система создаёт локальный алерт без обращения к облаку. Latency детектирования в таком паттерне определяется локальной обработкой, индексами, WAL mode и нагрузкой, а не только скоростью сети до центра.
Нужно заранее решить, хранить ли сырые события окна или только агрегаты. Сырые события полезны для диагностики, но быстрее расходуют память и диск. Агрегаты экономят ресурсы, но ограничивают последующий анализ.
Цифровой двойник на edge
Текущее состояние каждого устройства можно хранить как tuple: device_id → последнее состояние, timestamp, версия конфигурации, статус связи, активные ошибки. Запрос о текущем статусе устройства обслуживается из RAM без обращения к центральной платформе. Такой цифровой двойник полезен для локального HMI, SCADA-интеграций, MEC-сервисов и шлюзов команд.
Масштаб нужно считать явно. Например, 100 000 устройств × 200 байт состояния — это около 20 МБ полезных данных без учёта индексов, служебных структур, Lua heap, соединений и запасов. Поэтому оценка должна включать tuple payload и эксплуатационный headroom.
Шардирование по edge-кластеру
Когда один узел не справляется с объёмом устройств или потоком событий, можно рассмотреть vshard. Модуль vshard использует виртуальные бакеты и роли router/storage; rebalancer распределяет бакеты между replica sets. Практический смысл бакетов — отделить логическое распределение данных от физического числа узлов.
Для IoT ключ шардирования обычно выбирают по устойчивому идентификатору: device_id, site_id + device_id, tenant_id + device_id, иногда по географической зоне. Ошибка в выборе ключа приводит к перекосу: часть storage перегружена, а часть простаивает. Если запросы часто требуют собрать данные по площадке, стоит учитывать локальность: данные одной площадки лучше держать рядом, если это не создаёт горячий шард.
На что обратить внимание при проектировании
Размер рабочего набора данных
In-memory СУБД эффективна, пока рабочий набор помещается в RAM с запасом. Для IoT расчёт начинается с количества активных устройств, среднего размера состояния, глубины истории в памяти и числа индексов. Затем добавляют headroom под Lua runtime, соединения, очереди, снэпшоты, пики и контейнерные лимиты. Если расчёт выходит за доступную RAM, архитектуру дополняют vinyl, TTL, агрегацией, шардированием или внешним хранилищем.
Настройка WAL и checkpoint
WAL и снэпшоты нужно подбирать под RPO/RTO, а не оставлять по умолчанию. В документации Tarantool описаны режимы WAL write и fsync: write включает WAL без ожидания flush на устройство, а fsync обеспечивает запись на устройство хранения. Для промышленных сценариев это компромисс между задержкой записи и устойчивостью к сбоям питания или ОС. Нужны UPS, предсказуемый локальный SSD, мониторинг задержек WAL и регулярные тесты восстановления.
Мониторинг на edge-узле
В edge-среде проблема часто не в средней задержке, а в длинных хвостах. Узел может стабильно работать часами, а затем получить всплеск событий при восстановлении связи или массовом reconnect устройств. Мониторинг должен покрывать не только CPU и RAM.
Минимальный набор метрик:
- p50/p95/p99 latency операций приёма событий;
- размер WAL и скорость его роста;
- время последнего снэпшота и длительность снэпшота;
- recovery time на тестовом стенде;
- utilization памяти с учётом индексов и соединений;
- число соединений и backpressure на адаптерах;
- replication lag и статус upstream/downstream;
- размер очереди отправки в cloud;
- ошибки записи на диск;
- состояние vshard бакетов, если используется шардинг.
Tarantool имеет reference по метрикам, а также introspection через box.stat.memtx и box.info.replication.

Ускорьте обработку IoT-данных на edge
FAQ
Что такое in-memory база данных?
In-memory база данных хранит рабочий набор в оперативной памяти, а не делает диск основным путём доступа к данным. Это снижает задержку чтения и записи для горячих данных, но не отменяет необходимости в WAL, снэпшоты, репликации или других механизмах durability.
Теряются ли данные при перезапуске in-memory СУБД?
Не обязательно. Если СУБД использует WAL и снэпшоты, она может восстановить состояние после перезапуска. В Tarantool DataBase memtx восстанавливается из последнего снэпшота и WAL-файлов после него. Фактический RPO зависит от режима записи, диска, репликации и сценария отказа.
Чем edge computing отличается от облака для IoT?
Edge computing переносит часть обработки ближе к источнику данных: на шлюз, промышленный сервер, MEC-узел или локальный кластер. Это уменьшает зависимость от канала до облака для локальных решений. Облако при этом остаётся контуром для истории, аналитики, управления устройствами и обучения моделей.
Подходит ли Tarantool DataBase для edge-устройств с ограниченными ресурсами?
Да, если рабочий набор помещается в RAM с учётом индексов и служебных структур, а локальный диск подходит для WAL/снэпшотов. Для небольшого gateway нужно особенно внимательно считать память, retention, бэклог и время восстановления.
Что выбрать для edge: memtx или vinyl?
memtx подходит для горячих данных и низкой задержки доступа. vinyl — on-disk engine для случаев, когда объём данных больше доступной RAM. В одной архитектуре можно разделить данные: оперативное состояние в memtx, объёмные локальные наборы в vinyl или внешнем хранилище.
Когда нужен vshard?
vshard нужен, когда один replica set не справляется с объёмом данных или нагрузкой либо нужно горизонтально масштабировать storage. Для небольшого edge-узла шардинг может быть лишней сложностью; для регионального слоя или крупной площадки он помогает распределять данные по replica sets.

Узнать больше
Почитать по теме

28 мая
Репликация и резервное копирование баз данных: в чём разница и зачем нужны оба

7 апреля
Шардирование и зачем оно нужно при росте данных

2 апреля
