Interested Article - Reindexer

Reindexer — это NoSQL in-memory база данных общего назначения с открытым кодом . Основная цель Reindexer — это обеспечивать быстрый поиск по сложным запросам.

Reindexer сочетает в себе два подхода по структуре хранения данных:

  1. опциональное колоночное хранение выбранных индексных полей.
  2. оптимизированное бинарное представление JSON с дополнением из табличной строки с индексируемыми полями;

Reindexer состоит из ядра, написанного на C++, API написанного на Go и пользовательского интерфейса, написанного на Vue.js.

История

Прототип Reindexer появился в конце 2016, как альтернатива Elasticsearch для нужд платформы интерактивного телевидения компании ПАО Ростелеком . К середине 2017 была выпущена первая рабочая версия Reindexer с хранилищем на основе LevelDB/RocksDB и поддержкой полнотекстового поиска. В этом же году код был опубликован на .

В 2021 году, Reindexer отдаёт более 150 млн результатов на крупнейших российских сайтах, таких как Wink, Ситилинк и

Возможности

Индексы

Для выполнения запросов в Reindexer есть 6 типов индексов:

  • хэш-таблица, применяется для выборки по значению;
  • b-tree, с возможностью выборок по условиям 'больше', 'меньше' и сортировкой по полю;
  • колонка, с минимальным размером индекса в памяти, но с более медленным поиском, чем у хеш-таблицы и b-tree;
  • две реализации полнотекстовых индексов: нетребовательная к памяти и на базе триграмм;
  • индекс TTL, предназначенный для представления полей даты (хранящихся в виде временных меток UNIX), срок действия которых истекает через указанное количество секунд;
  • геоиндекс, позволяет найти все точки на расстоянии от конкретной точки.

В Reindexer используется метод «ленивого» построения индексов при добавлении записей в таблицу. Таким образом, сначала происходит добавление записи, тогда как индексы достраиваются, только когда они требуются для выполнения запроса .

Дисковое хранилище

Reindexer — полностью in-memory база данных, что означет, что данные, должны находиться в оперативной памяти. Таким образом, основное назначение дискового хранилища — это загрузка данных на момент начала работы системы. При добавлении записей, данные пишутся на диск в фоновом режиме.

В качестве программно-аппаратной части дискового хранилища Reindexer может использовать или .

Полнотекстовый поиск

У Reindexer существует два собственных компонента:

  1. fast, на базе префиксного дерева , c поддержкой опечаток и морфологии.
  2. fuzzy, триграммный.

Оба компонента поддерживают поиск транслитом и поиск с неверной раскладкой клавиатуры. Ранжирование результатов поиска происходит с учетом статистических вероятностей ( BM25 ) и точности совпадения. Reindexer позволяет настраивать формулу ранжирования, в зависимости от задачи.

Кроме того, существует возможность полнотекстового поиска по нескольким таблицам, с выдачей результатов, отсортированных по релевантности.

В Reindexer реализована «ленивая» индексация. Полнотекстовый индекс строится на первом запросе в полнотекстовом поле. Индексирование использует несколько потоков, что позволяет эффективно расходовать ресурсы современных многоядерных процессоров и получать высокую скорость процесса. На современном оборудовании скорость индексации составляет ~ 50 МБ / сек.

Join

Reindexer поддерживает аналог Join для NoSQL баз данных, — это функциональность, позволяющая добавить в каждый результат ответа поле, содержащее компоненты из присоединяемой таблицы. При этом, поддерживаются методы inner и left join Кроме того, есть возможность объединить несколько Join использую логические операторы.

Кэш десериализованных объектов

Данные в Reindexer хранятся в области памяти под управлением C++, и при получении выборки в Go-приложении происходит десериализация результатов в Go структуру.

Object cache в Go части Reindexer решает задачу переиспользования уже десериализованных объектов, без расходования времени на повторную десериализацию.

Инструменты

Reindexer доступен для систем OSX, Linux и Windows.

REST API

Для отображения интерактивной документации REST API, Reindexer использует Swagger

Веб-интерфейс

Reindexer UI

Reindexer поставляется вместе с встроенным web-интерфейсом , написанном на Vue.js.

В 2021, дизайн UI Reindexer получил награду Red Dot в номинации Brands & Communication Design .

GRPC API

Reindexer поддерживает GRPC API начиная с версии 3.0.

Командная строка

Инструмент командной строки поддерживает следующие функции:

  • Создание резервной копии всей базы данных и ее выгрузку в текстовый файл или консоль;
  • Выполнение запросов к базе данных;
  • Измение документов и метаданных базы данных.

Инструмент командной строки может работать в двух режимах. С сервером через сеть и напрямую с хранилищем, в так называемом без серверном режиме.

Лицензирование

Reindexer выходит под лицензией Apache License 2.0

Дополнительная литература

  • , Олег Герасимов.
  • , Антон Баширов.
  • , Gabriel Hodoroaga
  • , Олег Герасимов
  • , Илья Новиков
  • , Олег Герасимов

Примечания

  1. от 27 сентября 2021 на Wayback Machine , Олег Герасимов.
  2. от 27 сентября 2021 на Wayback Machine , Никита Денисенко.
  3. , red-dot.org

Ссылки

Источник —

Same as Reindexer