Начало знакомства с Reindexer
В разделе рассмотрены задачи, которые можно решить с помощью in-memory СУБД Reindexer, и ситуации, для которых подходит эта СУБД.
Задачи, которые поможет решить Reindexer
Встраиваемая документоориентированная СУБД Reindexer подходит для решения следующих задач:
- организация высокопроизводительного кеша данных с быстрой обработкой запросов для ускорения медленного приложения или базы данных;
- развертывание базы данных для приложений и сервисов со сложной логикой фильтрации контента, пользовательскими фильтрами;
- хранение и валидация сессий;
- организация полнотекстового поиска по сайту/контенту;
- хранение различных видов нотификаций для элементов обслуживаемой системы и сообщений для пользователей: маркетинговых, из биллинга, отчетов о доставке;
- достижение максимального показателя RPS без существенных вложений в «железо»;
- объединение в единое информационное пространство нескольких баз с информацией разного типа и обеспечение быстрого доступа к ней;
- повышение эффективности BPM-систем и аналогичных решений за счет разделения и эффективного использования оперативных данных различными экземплярами бизнес-процессов.
Reindexer также подойдет для ситуаций, когда требуется быстрая работа с данными, хранящимися в оперативной памяти, если нет высоких требований к их сохранности в случае критических сбоев. Кроме того, здесь реализованы:
- поддержка асинхронной и синхронной репликации (RAFT-кластер);
- поддержка шардирования;
- опциональное асинхронное сохранение данных на диск с использованием LevelDB/RocksDB в качестве персистентного хранилища.
Ключевые возможности и особенности СУБД
Reindexer поддерживает:
- Упорядоченные индексы. В СУБД реализовано упорядочение результатов запросов по отдельным полям.
- Индексы по элементам массива.
- Составные индексы (по нескольким полям) и первичные ключи.
- ГЕО индексы (Geospatial indexes).
В СУБД реализована поддержка до 256 индексов в одном неймспейсе.
Также среди особенностей Reindexer:
- Поддержка агрегированных запросов.
- Выборка с помощью операций объединения.
- Полнотекстовый поиск с сортировкой результатов по релевантности.
- Высокоуровневый ORM-подобный интерфейс для запросов, который облегчает связывание объектного и реляционного представлений.
- Поддержка TTL-индексов (TTL — Time To Live), используемых для данных с ограниченным временем жизни. В СУБД реализован механизм автоматической инвалидации устаревших записей.
- SQL-запросы. Работают медленнее, чем основной интерфейс для запросов, поэтому менее предпочтительны.
- Поддержка сетевого доступа по HTTP, RPC и gRPC.
- Многопоточный конкурентный доступ к данным, хранящимся в оперативной памяти.
Высокая производительность
Главным приоритетом при разработке СУБД Reindexer была высокая производительность. Одним из ключевых ориентиров было достижение как можно большего значения RPS с одного сервера при условии реализации сложной бизнес-логики фильтрации данных (контента), пользовательских фильтров и полнотекстового поиска. Тесты показывают, что производительность Reindexer сопоставима с типичной базой данных «ключ-значение».
Минимальное потребление памяти
Reindexer стремится потреблять как можно меньше памяти. Overhead составляет + ≈4-16 байт на каждый индекс и около 32 байт на документ. Добиться невысокого потребления памяти удается за счет:
- Хранения документов и индексов в плотных двоичных структурах C++.
- Кеширования объектов для десериализованных документов. Благодаря этому снижаются повторяющиеся затраты памяти.
- Реализации принципа повторного использования объектов буферного пула. За счет этого большинство запросов обрабатываются вообще без выделения памяти.
Полнотекстовый поиск
Reindexer позволяет организовать полнотекстовый поиск с:
- сортировкой результатов по релевантности;
- поддержкой морфологии, транслита;
- автоматическим исправлением при неверной раскладке клавиатуры;
- поддержкой префиксов и суффиксов;
- нечувствительностью к регистру.