Начало знакомства с 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 позволяет организовать полнотекстовый поиск с:

  • сортировкой результатов по релевантности;
  • поддержкой морфологии, транслита;
  • автоматическим исправлением при неверной раскладке клавиатуры;
  • поддержкой префиксов и суффиксов;
  • нечувствительностью к регистру.